Basit bir JavaCard HelloWorld betiğim var, sanal okuyucu ile JCIDE'da çalıştırıyorum, sonra pyapdutool'dan apdu komutları gönderiyorum: 00a404000e yardım sonra 80000000 ve javacard dizesini alıyorum, her şey yolunda gidiyor. Sorum şu: Bu yanıt yerine bir tlv biçim verisini nasıl iade edebilirim? Bununla ilgili 4.3 numaralı kitapta ve google'da javacard komut dosyasında emv tlv etiketlerini uygulamak için tek bir örnek bulamadım. Birisi bunu anlamak için beni doğru yola sokabilir mi?EMV JavaCard APDU TLV'de Yanıt Format
Kısacasıpackage helloworld;
import javacard.framework.*;
public class helloworld extends Applet
{
private static final byte[] javacard = {(byte)'J',(byte)'a',(byte)'v'(byte)'a',(byte)' ',(byte)'C',(byte)'a',(byte)'r',(byte)'d',(byte)'!',};
private static final byte JC_CLA = (byte)0x80;
private static final byte JC_INS = (byte)0x00;
public static void install(byte[] bArray, short bOffset, byte bLength)
{
new helloworld().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
public void process(APDU apdu)
{
if (selectingApplet())
{
return;
}
byte[] buf = apdu.getBuffer();
byte CLA = (byte) (buf[ISO7816.OFFSET_CLA] & 0xFF);
byte INS = (byte) (buf[ISO7816.OFFSET_INS] & 0xFF);
if (CLA != JC_CLA)
{
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
switch (buf[ISO7816.OFFSET_INS])
{
case (byte)0x00:
OutPut(apdu);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
private void OutPut(APDU apdu)
{
byte[] buffer = apdu.getBuffer();
short length = (short) javacard.length;
Util.arrayCopyNonAtomic(javacard, (short)0, buffer, (short)0, (short) length);
apdu.setOutgoingAndSend((short)0, length);
}
}
: Ben bu biçimde yanıt göndermek için mümkün istiyorum, böyle bir şey: i http://www.emvlab.org/tlvutils/ giderken 6F1A840E315041592E5359532E4444463031A5088801025F2D02656E sonra deşifre edebilmek için.
JavaCard API'sine aşırı derecede düşkün değilim. Karmaşık, kaynak aç ve tamamen doğru değil. Basit bir TLV ayrıştırıcı/üreteci muhtemelen tercih edilmelidir. Benimkini paylaşamam. –