2013-02-17 34 views
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 

我看不到我在做什麼錯。做一些卡需要額外的初始化步驟或一些額外的參數選擇?

+0

你可以嘗試用'0x0C'作爲P2(而不是'0x00')嗎?也許文件ID是正確的,但它不能返回任何文件信息('0x0C'意思是:不要給我額外的信息)。如果它有效,我會做出這個答案。 – 2013-02-20 20:26:47

+0

它與0x0C一起使用。謝謝。 – Nemanja 2013-02-24 18:07:22

+0

不客氣,貼出來作爲答案... – 2013-02-24 18:20:33

回答

1

您可以使用0x0C作爲P2(而不是0x00)?也許文件ID是正確的,但它不能回饋任何文件信息(0x0C表示:不要回送文件信息)。

這取決於卡操作系統和/或應用程序,如果這會影響返回的狀態字。