我正在尝试使用 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
我看不出我做错了什么。某些卡是否需要额外的初始化步骤或选择的一些额外参数?