我在一个项目中使用 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 个字节的其他内容,一开始就被排除在两字节消息长度之外。我不确定传递给解析器的数据是否会导致问题。