2017-04-20 81 views
0

我正在尝试使用pc/sc透明会话和收发数据对象从sony felica卡读取数据。在PC/SC响应中获取额外的字节82 00

我正的响应是针对读取未加密命令是

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 appende d在卡片的回应中。

现在,当我尝试用卡进行身份验证,我得到

C0 03 01 6F 01 90 00

这是在PC/SC一个错误。我想解决这些额外的字节82 00,我相信这将解决所有需要认证和加密的命令的问题。

回答

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 - long form with两个字节长度为(see parsed

  • 97|83000002|D0D1 - 长形式三个字节长度为(see parsed

  • ...

你的读者是使用两个字节发送长度ICC响应数据对象(这是完全有效的)。

您应该正确解析响应...祝您好运!

PS:以上手段,你的截断响应的Data部分仍包含响应长度(即Len|Data)一个额外的字节

+0

是的,你是正确的,但为什么只有相互验证命令失败了FeliCa的? –

+0

你能用一个完整的APDU跟踪来更新你的问题吗?你正在使用哪一个阅读器(因为6F01不是由PC/SC定义的 - 最近的一个是“XX 6F 00” - *数据对象XX失败,没有精确的诊断*)? – vlp