【发布时间】:2017-02-24 23:41:08
【问题描述】:
我在一个项目中使用 MagTek DynaPro 读取信用卡数据并将其输入到会计系统中(不是我在这个项目上的第一篇文章)。我已经成功地利用 Dukpt.NET 来解密 MSR 数据,这很好 (https://github.com/sgbj/Dukpt.NET)。因此,我开始着手获取 EMV 数据,并使用以下 MagTek 文档作为 TLV 结构参考:https://www.magtek.com/content/documentationfiles/d99875585.pdf(从第 89 页开始)。但是,我无法读取数据。
我尝试使用 BerTlv.NET (https://github.com/kspearrin/BerTlv.NET) 来处理数据解析,但是当我将 TLV 字节数组传递给它时,它总是抛出异常。具体来说,这是我得到的:
System.OverflowException : Array dimensions exceeded supported range.
我还尝试通过其他一些实用程序运行数据来解析它,但它们似乎也都会抛出错误。所以,我想我只能自己尝试解析它,但我不确定完成它的最有效方法。在某些情况下,我知道要读取多少字节才能获得数据长度,但在其他情况下,我不知道会发生什么。
此外,当破坏一些数据时,我会到达 F9 标记,在它和 DFDF54 标记之间,十六进制读取为 8201B3。现在,考虑到完整消息长度的前两个字节是 01B7,01B3 是有意义的,但我不理解 82。我不能假设这是“EMV 应用程序交换配置文件”的标签,因为它在 下列出F2 标签。
此外,还有一些零填充(我认为最多可达 8 个字节)和末尾的 4 个字节的其他内容,一开始就被排除在两字节消息长度之外。我不确定传递给解析器的数据是否会导致问题。
【问题讨论】: