多条记录读取APDU命令结构?
Multi-records Reading APDU command structure?
我有一张支持T0协议的卡,上面安装了一个小程序。主机发送"multi-records reading"命令获取记录数据。读取由该命令的该数据字段中的记录标识符指定的记录。这些是我执行的步骤:
- Select 东风
- 发送命令读取记录序列
00 B2 00 06 16 73 0A 51 02 40 01 54 04 00 10 00 04 73 08 51 02 40 02 54 02 00 01 00
命令含义如下:
- INS = 'B2': 读取记录
- P1 = '00': 引用当前记录 (ISO 7814-4, 7.3.3, table 48)
- P2 = '07' = '00000 110' :
'0000' 表示当前短 EF id (ISO 7814-4, 7.3.2, table 47)
'111' 表示读取从最后到 P1 的所有记录 (ISO 7814-4, 7.3.3, table 49)
- Le = 16 : 数据长度
- 数据字段遵循BER-TLV,例如:
73 0A 51 02 40 01 54 04 00 10 00 04
Tag'73' indicate that sequence of bytes above consist hierarchy data object structure in data filed (length = '0A')
Tag'51' reference to 2-byte EF identifier = '40 01'
Tag'54' reference to one or more record identifiers, in this case are '00 10' and '00 04'
- Le = '00'
这是来自卡的预期响应:
53 |length of data| record data| 53| length of data| record data|......
我用网卡测试这个命令,网卡return'Unknown Error'短信
你能告诉我这个命令有什么问题吗?我在任何时候都被误解了吗?
谢谢
在不知道实际实现情况下无法回答这个问题。 6F00
- 指示未知错误的状态字 - 仅应在实现出现内部错误时返回。对于 Java Card 实现 - 例如 - 在处理 APDU 的 process
方法中为未捕获的异常返回 6F00
。
但就像 ISO/IEC 7816-4 的其余部分一样,没有什么是一成不变的。它甚至没有定义什么时候应该返回一个特定的错误,所以即使是上面的也不确定。 ISO/IEC 7816-4 在这方面完全没用。
感谢您的回答。我的问题解决了
实际上 return SW = 61 XY
不是错误信息。根据 ISO 7814-3 这意味着:
Process completed normally (SW2 encodes N x , i.e., the number of extra data bytes still available). In cases 1 and 3, the
card should not use such a value. In cases 2 and 4, for transferring response data bytes, the card shall be ready to receive
a GET RESPONSE command with P3 set to the minimum of N x and N e .
所以只需要发送一个GET RESPONSE命令来获取响应数据:
00 C0 00 00 XY
XY:仍然可用的额外数据字节数
我有一张支持T0协议的卡,上面安装了一个小程序。主机发送"multi-records reading"命令获取记录数据。读取由该命令的该数据字段中的记录标识符指定的记录。这些是我执行的步骤:
- Select 东风
- 发送命令读取记录序列
00 B2 00 06 16 73 0A 51 02 40 01 54 04 00 10 00 04 73 08 51 02 40 02 54 02 00 01 00
命令含义如下:
- INS = 'B2': 读取记录
- P1 = '00': 引用当前记录 (ISO 7814-4, 7.3.3, table 48)
- P2 = '07' = '00000 110' :
'0000' 表示当前短 EF id (ISO 7814-4, 7.3.2, table 47)
'111' 表示读取从最后到 P1 的所有记录 (ISO 7814-4, 7.3.3, table 49) - Le = 16 : 数据长度
- 数据字段遵循BER-TLV,例如:
73 0A 51 02 40 01 54 04 00 10 00 04
Tag'73' indicate that sequence of bytes above consist hierarchy data object structure in data filed (length = '0A')
Tag'51' reference to 2-byte EF identifier = '40 01'
Tag'54' reference to one or more record identifiers, in this case are '00 10' and '00 04'
- Le = '00'
这是来自卡的预期响应:
53 |length of data| record data| 53| length of data| record data|......
我用网卡测试这个命令,网卡return'Unknown Error'短信
你能告诉我这个命令有什么问题吗?我在任何时候都被误解了吗?
谢谢
在不知道实际实现情况下无法回答这个问题。 6F00
- 指示未知错误的状态字 - 仅应在实现出现内部错误时返回。对于 Java Card 实现 - 例如 - 在处理 APDU 的 process
方法中为未捕获的异常返回 6F00
。
但就像 ISO/IEC 7816-4 的其余部分一样,没有什么是一成不变的。它甚至没有定义什么时候应该返回一个特定的错误,所以即使是上面的也不确定。 ISO/IEC 7816-4 在这方面完全没用。
感谢您的回答。我的问题解决了
实际上 return SW = 61 XY
不是错误信息。根据 ISO 7814-3 这意味着:
Process completed normally (SW2 encodes N x , i.e., the number of extra data bytes still available). In cases 1 and 3, the card should not use such a value. In cases 2 and 4, for transferring response data bytes, the card shall be ready to receive a GET RESPONSE command with P3 set to the minimum of N x and N e .
所以只需要发送一个GET RESPONSE命令来获取响应数据:
00 C0 00 00 XY
XY:仍然可用的额外数据字节数