我正在开发一种用于阅读EMV卡的智能卡读卡器。我正在制作万事达卡,我正在尝试阅读特定记录。结果显示读数很好,但是当我解析结果时,它们似乎不遵循TLV标准,其中结果以标签/模板 - 长度 - 值格式出现。返回的结果示例如下:
70 - 读取记录响应标签
81 - 应指明长度
e0 - 应该是标签/模板......?
8f-应标明prev的长度。标签...?
01 05 9f 32 ... 90 00
我的问题是前几个字节。第一个字节表示它是READ RECORD模板,但第二个字节应表示长度,第三个字节应该是值,这是下一个标记的开头。但是没有标记为E0的EMV标签,所以我是错误地翻译结果还是缺少某些东西。我使用相同的命令读取了以前的记录,结果很好:
70 - 标签
27
61 - 另一个标签/模板指示器e.t.c.
25 4f 07 ... 90 00
我能做错什么?或者这些结果如何翻译?
答案 0 :(得分:2)
此处的长度以BER格式编码。这意味着81表示后面有一个长度字节(只有7F的长度可以直接在一个字节中编码),所以E0是长度,8F是标签。有关详细信息,请参阅ISO 7816-4(在2005版本中,它是章节5.2.2.2 BER-TLV长度字段)。最后的90 00是SW1 / SW2,表示当然读取成功。
答案 1 :(得分:1)
像guidot所说,TLV中的长度成分并不总是单个字节。标签也一样。您可以尝试将回复粘贴到http://tvr-decoder.appspot.com/。在第一个下拉列表中选择TLV数据。
EMV Book 3有一节致力于BER-TLV。