我正在开发一个用于读取EMV卡的智能卡读取器。我正在制作一张万事达卡,我正试着读一张特定的唱片。结果显示读取很好,但是当我解析结果时,它们似乎不遵循TLV标准,在TLV标准中,结果以标记/模板长度-值格式出现。返回的结果的样本如下:
读取记录响应标签
81 -应该标明长度
e0 -应该是标签/模板.?
8f -Should表示prev的长度。标签.
01 05 9 f 32 . 90 00
我的问题是头几个字节。第一个字节表示读取记录模板,但第二个字节表示长度,第三个字节表示值,它是下一个标记的开头。但是没有标记为E0的EMV标签,所以我是错误地翻译了结果,还是缺少了什么东西。我使用相同的命令读取了以前的记录,结果显示得很好:
70 -标签
27
61 -另一个标签/模板指示符等。
25楼07 . 90 00
我做错什么了?或者如何翻译这些结果?
发布于 2014-11-13 08:25:54
这里的长度是以BER格式编码的。这意味着81表示后面有一个长度字节(只有长达7F的长度可以直接用一个字节编码),所以E0是长度,8F是标记。有关更多细节,请参阅。ISO 7816-4 (在2005年版本中是第5.2.2.2章BER长度字段).最后90000是SW1/SW2,表示读取成功。
发布于 2014-11-16 11:55:09
正如guidot所说,TLV中的长度组件并不总是一个字节。标签也是如此。您可以尝试将您的响应粘贴到http://tvr-decoder.appspot.com/中。在第一个下拉菜单中选择TLV数据。
EMV 第3册有一节专门讨论BER.
https://stackoverflow.com/questions/26902973
复制相似问题