我正在尝试使用pc / sc透明会话和收发数据对象从sony felica卡读取数据。
我得到的响应是没有加密命令的读取
c0 03 00 90 00 92 01 00 96 02 00 00 97 82 00 +数据
但是根据协议,响应应该是
c0 03 00 90 00 92 01 00 96 02 00 00 97 +数据
我无法弄清楚卡片的回复中附加的最后一个82 00。
现在,当我尝试使用卡进行身份验证时,
c0 03 01 6F 01 90 00
这是pc / sc中的错误。我想解决这些额外的字节82 00,我相信这将解决所有需要验证和加密的命令的问题。
答案 0 :(得分:1)
响应数据采用BER-TLV编码(请参阅PC/SC 2.02, Part 3)。
在BER-TLV编码中,有两种方法可以用两个八位字节的数据0x97
对标记0xD0D1
进行编码,例如:
97|02|D0D1
- 简短形式(see parsed)
97|8102|D0D1
- 包含一个长度为see parsed的八位字节的长格式
97|820002|D0D1
- 包含两个八位字节的长格式(see parsed)
97|83000002|D0D1
- 包含三个八位字节的长字形(see parsed)
...
您的读者使用两个八位字节发送 ICC响应数据对象的长度(完全有效)。
你应该正确解析答案......祝你好运!
PS:以上意思是,截断响应的Data
部分仍然包含一个带有响应长度的额外字节(即Len|Data
)