解码 EMV TLV 数据

Decode EMV TLV Data

我正在开发支持 EMV 卡的 POS 应用程序。我能够从 TLV 中的 Verifone MX 卡 reader 读取卡数据,但我在将 TLV 数据解码为可读数据时遇到问题。

我能够将数据拆分为 TLV 标签及其值。结果值是十六进制而不是解码文本。

示例:

这是一个样本 TLV 数据(我得到了这个样本 TLV 数据 here

6F2F840E325041592E5359532E4444463031A51DBF0C1A61184F07A0000000031010500A564953412044454249548701019000

当我在 TLVUtil 中检查此 TLV 时,我以可读格式获取某些标签中的数据(如此处的标签 50)。

我的申请中最接近的是:

Tag Value
50  56495341204445424954
4F  A0000000031010
61  4F07A0000000031010500A56495341204445424954870101
6F  840E325041592E5359532E4444463031A51DBF0C1A61184F07A0000000031010500A56495341204445424954870101
84  325041592E5359532E4444463031
87  1
90  
A5  BF0C1A61184F07A0000000031010500A56495341204445424954870101
BF0C 61184F07A0000000031010500A56495341204445424954870101

我想知道是否有任何方法可以识别某些需要从十六进制转换为字符串的标签,或者 .Net 中是否有任何 TLV 解析器和解码器可以复制 TLVUtil工具.

只有少数标签需要转换为字符串。通常,放置在 POS 屏幕上的标签以相当于可读字符串的十六进制形式个性化。

  • 5F20 : 持卡人姓名

  • 50 : 应用程序标签。

  • 5F2D:语言偏好

你必须知道哪些标签可以转换。

完整的 EMV 标签列表,可在 EMVCo 4.3 规范手册 3 中找到 - 你可以从这里下载 - https://www.emvco.com/download_agreement.aspx?id=654 数据的表示方式因字段而异。检查 'Annex A - Data Elements Dictionary'

第 4.3 节中提到了有关编码的详细信息

阅读这两个部分,您的问题就解决了。

在我看来,您可以通过编程方式识别类似的东西,

标签是一个字节(5A - 盘号)或包含 2 个字节(5F20 - 持卡人姓名),并且

长度为 1 个字节或 2 个字节 AND

标签是原始的或构造的。更多你可以阅读Here

如果您知道该列表,您可以获得一些有用的东西 Here,它定义了您要查找的标签的格式。

您可以在这里对格式进行硬编码,因为它定义明确。

希望对您有所帮助。

以6F开头的数据是EMV卡在SELECT命令后响应的文件控制信息(FCI)。该视频中有一个示例也已解码和解释。 https://youtu.be/iWg8EBhsfjY

很容易检查出来