javax.smartcardioを使用してISO-7816-4eVCR(電子車両登録カード)からデータを読み取ろうとしています。カードからファイルを選択しようとすると、SWコード6A86が表示されます。これは「不正なP1またはP2パラメータ」に変換されます。P1とP2の値の多くの組み合わせを試しましたが、同じ結果が得られました。カード自体は他のプログラムで正常に動作し、サンプルコードは他のカードで正常に動作します。問題のあるカードは、この質問と同じカード です。
これは私が使用するコードです:Card card = terminal.connect( "*"); System.out.println( "ATR:" + Utils.bytes2HexString(card.getATR()。getBytes()));
byte aid[] = {(byte)0xA0, 0x00, 0x00, 0x00, 0x77, 0x01, 0x08, 0x00, 0x07,
0x00, 0x00, (byte) 0xFE, 0x00, 0x00, (byte) 0xAD, (byte) 0xF2};
ResponseAPDU response = null;
CardChannel channel = card.getBasicChannel();
response = channel.transmit(new CommandAPDU(0x00, 0xA4, 0x04, 0x0C, aid));
System.out.println("AID: " + response);
response = channel.transmit(new CommandAPDU(0x00, 0xA4, 0x02, 0x00, new byte[]{(byte)0xD0, 0x01}));
System.out.println("SELECT: " + response);
そして出力は次のとおりです。
ATR: 3B:DB:96:00:80:B1:FE:45:1F:83:00:31:C0:64:1A:18:01:00:0F:90:00:52
AID: ResponseAPDU: 2 bytes, SW=9000
SELECT: ResponseAPDU: 2 bytes, SW=6a86
何が間違っているのかわかりません。一部のカードでは、選択のために追加の初期化手順または追加のパラメーターが必要ですか?