4

我正在开发用于读取 EMV 卡的智能卡读卡器。我正在使用万事达卡,并且试图读取特定记录。结果显示读数很好,但是当我解析结果时,它们似乎不遵循 TLV 标准,结果以标签/模板长度值格式出现。返回的结果示例为:

70 - 读取记录响应标签
81 - 应指示长度
e0 - 应为标签/模板...?
8f - 应该表示上一个的长度。标签...?
01 05 9f 32 ... 90 00

我的问题是前几个字节。第一个字节表示它是一个 READ RECORD 模板,但第二个字节应该表示长度,第三个应该是值,它是下一个标签的开始。但是没有标记为 E0 的 EMV 标签,所以是我错误地翻译了结果还是缺少了什么。我使用相同的命令阅读了以前的记录,结果很好:
70 - 标记
27
61 - 另一个标记/模板指示器等
25 4f 07 ... 90 00
我做错了什么?或者如何翻译这些结果?

4

2 回答 2

2

这里的长度以 BER 格式编码。这意味着81表示后面有一个长度字节(只有7F以内的长度可以直接编码在一个字节中),所以E0是长度,8F是标签。有关更多详细信息,请参阅。ISO 7816-4(在 2005 版本中是第 5.2.2.2 章 BER-TLV 长度字段)。最后的 90 00 是 SW1/SW2 表示读取当然成功了。

于 2014-11-13T08:25:54.513 回答
1

就像 guidot 说的那样,TLV 中的长度组件并不总是一个字节。标签也是如此。您可以尝试将您的回复粘贴到http://tvr-decoder.appspot.com/中。在第一个下拉列表中选择 TLV 数据。

EMV Book 3有一节专门介绍 BER-TLV。

于 2014-11-16T11:55:09.737 回答