我正在尝试使用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
我无法看到我做错了什么。有些卡需要额外的初始化步骤或一些额外的参数才能选择吗?
答案 0 :(得分:1)
您可以使用0x0C
作为P2(而不是0x00
)?也许文件ID是正确的,但它无法返回任何文件信息(0x0C
表示:不回复文件信息)。
这取决于卡操作系统和/或应用程序,如果这会影响返回的状态字。