无法在ISO-7816-4智能卡上选择文件

时间:2013-02-17 21:57:19

标签: java smartcard apdu

我正在尝试使用ISO-7816-4 eVCR(电子车辆登记卡)读取数据 javax.smartcardio。每当我尝试从卡中选择文件时,我都会获得SW代码6A86 转换为'错误的P1或P2参数'。我尝试了很多值的组合 P1和P2得到了相同的结果。 卡本身适用于其他程序,示例代码可以与其他卡一起使用。 我遇到问题的卡与this question中的卡相同。

这是我使用的代码:         卡片卡= 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

我无法看到我做错了什么。有些卡需要额外的初始化步骤或一些额外的参数才能选择吗?

1 个答案:

答案 0 :(得分:1)

您可以使用0x0C作为P2(而不是0x00)?也许文件ID是正确的,但它无法返回任何文件信息(0x0C表示:不回复文件信息)。

这取决于卡操作系统和/或应用程序,如果这会影响返回的状态字。