1

我正在尝试使用 javax.smartcardio 从 ISO-7816-4 eVCR(电子车辆登记卡)读取数据。每当我尝试从卡中选择文件时,我都会得到 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

我看不出我做错了什么。某些卡是否需要额外的初始化步骤或选择的一些额外参数?

4

1 回答 1

1

您可以0x0C用作 P2 (而不是0x00)?也许文件ID是正确的,但它不能回馈任何文件信息(0x0C意思是:不回馈文件信息)。

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

于 2013-02-24T18:09:39.013 回答