Bir Java Kartına basit bir APDU göndermeye çalışıyorum (aşağıdaki uygulamanın basit kodunu ekledim). Uygulamayı Eclipse simülatöründe zaten test ettim ancak bir APDU’yu APDU’ya göndermek istediğimde applet aşağıdaki hata ile başarısız olur: send_APDU() returns 0x80206E00 (6E00: Wrong CLA byte.)
.Applet zaten karta yüklü (bunu yapmak için GpShell kullandım) .Bu APDU göndermek için kullandığım komut dosyasının tam çıktısıdır.Java Kartı APDU Hatası
D:\GPShell-1.4.4>GPShell.exe send_APDU.txt
establish_context
enable_trace
enable_timer
card_connect
command time: 15 ms
send_apdu -sc 0 -APDU b0000000010000
Command --> B0000000010000
Wrapped command --> B0000000010000
Response <-- 6E00
send_APDU() returns 0x80206E00 (6E00: Wrong CLA byte.)
command time: 860 ms
card_disconnect
command time: 31 ms
release_context
command time: 0 ms
İşte uygulamanın tam kodu.
public class Contor extends Applet {
private byte contor = 0;
private final static byte CLS=(byte)0xB0;
private final static byte INC=(byte)0x00;
private final static byte DEC=(byte)0x01;
private final static byte GET=(byte)0x02;
private final static byte INIT=(byte)0x03;
private Contor() {
}
public static void install(byte bArray[], short bOffset, byte bLength) throws ISOException {
new Contor().register();
}
public void process(APDU apdu) throws ISOException {
if(this.selectingApplet())return;
byte[] buffer = apdu.getBuffer();
if(buffer[ISO7816.OFFSET_CLA] != CLS)
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
switch(buffer[ISO7816.OFFSET_INS])
{
case INC:contor++; break;
case DEC:contor--; break;
case GET:
buffer[0] = contor;
apdu.setOutgoingAndSend((short)0,(short)1);
break;
case INIT:
apdu.setIncomingAndReceive();
contor = buffer[ISO7816.OFFSET_CDATA];
break;
}
}
İkinci noktanızla ilgili olarak: Her iki "arabellek [ISO7816.OFFSET_CLA]" ve "CLS" bayt olarak bildirildiklerinden, her ikisi de aynı imzalı değeri (yani -80 (byte) 0xB0' için) içerir ve karşılaştırma mükemmel çalışır. Kısa/int, kesme ve baytıma geri gönderilmesi hiçbir şeyi değiştirmez ve bu durumda tamamen işe yaramaz. –
@MichaelRoland Haklısınız. Teşekkür ederim. Cevap güncellendi. Döküm ve bit-bilge ve tampon elemanlarını "127" den daha büyük bir kısa/int değeriyle karşılaştırdığımız durumlarda gereklidir. sağ? – Abraham