SmartCard:APDU命令READ_BINARY返回错误:错误的参数P1-P2

时间:2015-01-16 14:49:32

标签: java smartcard apdu

我正在尝试读取MF下的文件。 EF.DIR文件。我得到了文件的 SFID ,所以我不首先使用SELEC_FILE方法(因为它没有必要)。 我可能在理解 P2 参数(OFFSET)时遇到一些问题。我读了几个解释,但仍然没有得到 OFFSET 的含义。但我尝试了0-8的所有数字以防万一,没有用。

CLA = 0x00
INS_READ = 0xB0
P1_READ = 0x9E (by the datasheed: bit(8) = 1, bit(7:6) = 00, bit(5:1): SFID)
P2 = 0x04 (I figured that the offset should be from bit0 to bit4 (the SFID)
Le = 0 (by the datasheet I have, this should mean that any size will be returned)

这是我的代码:

byte[] readBinary = { CLA, INS_READ, P1_READ, (byte) 0x04, (short) 0};
ResponseAPDU  read = channel.transmit(new CommandAPDU(readBinary));
String responseReadToString =read.toString();
System.out.println("Response Read: " + responseReadToString + "\n" + "Response Read (HEX): " + responseReadHex );

我在Console中获得的输出是:

Response Read: ResponseAPDU: 2 bytes, SW=6b00
Response Read (HEX): 6B00

对于6B00的SW1-SW2的解释:

Incorrect parameters P1-P2

我真的不知道什么是错的,而且很难在网上找到SmartCards的支持,所以希望能够更好地了解这一点的人可以帮助我。我也尝试先使用SELECT_FILE,然后使用READ_BINARY(在P1 parametr ofcourse中没有SFID),但它以&#34响应;没有将EF设置为当前"。

任何帮助人员?

1 个答案:

答案 0 :(得分:1)

偏移量是您开始阅读的位置/起点。

示例:Data = [0x00 0x01 0x02 0x03 0x04 0x05]

当您使用offset = 2查询ReadBinary时,返回的数据将是[0x02 0x03 0x4 0x05]

由于您可能想要读取整个EF.DIR文件偏移量应为零。

要阅读EF.DIR,您可以发送

00 B0 9E 00 00

00 B1 2F 00 04 54 02 00 00 00

00 A4 02 0C 02 2F 00
00 B0 00 00 00