Unten Sie ein einfaches Applet sehen, die 0x6781
auf eingehende APDU gibt Befehle mit IN = 0x70
oder IN = 0x71
:Java Card hat eine seltsame Antwort mit auf APDU IN = 0x70
package testPack;
import javacard.framework.*;
public class TestApp extends Applet
{
public static void install(byte[] bArray, short bOffset, byte bLength)
{
new TestApp().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
public void process(APDU apdu)
{
if (selectingApplet())
{
return;
}
byte[] buf = apdu.getBuffer();
switch (buf[ISO7816.OFFSET_INS])
{
case (byte)0x70:
ISOException.throwIt((short)0x6781);
break;
case (byte)0x71:
ISOException.throwIt((short)0x6781);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
}
Das Problem ist, dass, ich erhalte 0x6C01
zum APDU-Befehl mit INS = 0x70
:
Send: 00 A4 04 00 07 01 02 03 04 05 00 00 00
Recv: 90 00
Send: 00 70 00 00 00
Recv: 6C 01
Send: 00 70 00 00 01
Recv: 01 90 00
Send: 00 71 00 00 00
Recv: 67 81
ich zwei verschiedene Java Cards versucht (One ist NXP JCOP v2.4.2 r3 und das andere eine KONA Java-Karte) durch beide kontaktbehaftete und kontakt Schnittstellen und usi ng zwei verschiedene cap-dateien, die in zwei verschiedenen laptops über zwei verschiedene IDEs erzeugt werden !!! (Wie verdächtig bin ich? : D) Aber die Antwort ist gleich.
Ich vermute, der PCSC oder Card Manager für diese seltsame Antwort. Weil im Simulator selbst die Methode process
diesen speziellen INS-Wert nicht benötigt.
Was ist los damit?
Vielen Dank liebe Vojta. Sind diese speziellen Werte auf den SELECT APDU-Befehl und den MANAGE CHANNEL APDU-Befehl beschränkt? Oder muss ich eine andere CLA als 0x00 für alle anderen ISO7816-Befehle auch verwenden? Ich meine, zum Beispiel, kann ich 'A2' als INS mit CLA = 00 in meinem Applet verwenden oder weil es für SEARCH RECORD definiert ist, muss ich vermeiden, es auch mit CLA = 0x00 zu verwenden? (Könnten Sie bitte auch Ihre Gmail für die SIM-Karten-Applet-Entwicklungsfrage überprüfen?) – Abraham