1
我試圖使用 javax.smartcardio從ISO-7816-4 eVCR(電子車輛註冊卡)讀取數據。每當我嘗試從卡上選擇文件,我得到SW代碼6A86,其中 轉換爲'P1或P2參數不正確'。我嘗試了許多 P1和P2的值組合,並得到相同的結果。 卡本身與其他程序正常工作,示例代碼與其他卡片正常工作。 我遇到問題的卡片與this question中的卡片相同。無法選擇ISO-7816-4智能卡上的文件
這是我使用的代碼: 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
我看不到我在做什麼錯。做一些卡需要額外的初始化步驟或一些額外的參數選擇?
你可以嘗試用'0x0C'作爲P2(而不是'0x00')嗎?也許文件ID是正確的,但它不能返回任何文件信息('0x0C'意思是:不要給我額外的信息)。如果它有效,我會做出這個答案。 – 2013-02-20 20:26:47
它與0x0C一起使用。謝謝。 – Nemanja 2013-02-24 18:07:22
不客氣,貼出來作爲答案... – 2013-02-24 18:20:33