当前位置:  开发笔记 > 编程语言 > 正文

在EMV事务中解析PDOL以获取GET PROCESSING OPTIONS命令

如何解决《在EMV事务中解析PDOL以获取GETPROCESSINGOPTIONS命令》经验,为你挑选了1个好方法。

我正在尝试构建一个格式正确的GET PROCESSING OPTIONS命令,以发送到非接触式EMV卡.这篇文章非常有用,但我只需要了解更多细节.

在解析PDOL时,可以安全地假设每个标记的长度为2个字节,然后是预期的数据大小吗?

例如,PDOL 9F66049F02069F37049F1A02被分成 9F66 04,9F02 06等等,每个都有2个字节的标签,1个字节用于数据值的预期长度.

在解析时假设每个标记的长度是2个字节是否安全?



1> Michael Rola..:

不,你不能指望每个标签都包含两个字节(尽管大多数标签都有).EMV中的标签长度​​值(TLV)结构遵循ASN.1编码规则(基本编码规则,BER).有关详细信息,请参阅以下文档:

ITU-T X.690:ASN.1编码规则:基本编码规则(BER),规范编码规则(CER)和可分辨编码规则(DER)的规范

Layman的ASN.1,BER和DER子集指南(作者:Burton S. Kaliski Jr.)

后者是一个非常好的介绍,帮助我入门.

TLV结构(数据对象)由标记值,长度值和数据有效负载(值)组成:

+-----------+-----------+-----------+
|    Tag    |  Length   |   Value   |
| (N Bytes) | (M Bytes) | (L bytes) |
+-----------+-----------+-----------+

PDOL(以及任何其他数据对象列表,DOL)包含标记和一个或多个此类数据对象的长度部分.类似地,PDOL相关数据包含PDOL中引用的DO的值部分.标签和长度部分都可以包含一个或多个字节.

对于标记部分,规则与此类似(有关详细信息,请参阅上述参考):

如果第一个标记字节的低5位都是1(tag[0] & 0x01F == 0x01F),则标记至少包含两个字节.

如果下一个标记字节的高位是1(tag[i] & 0x080 == 0x080),则标记由另外一个字节组成.对于每个后续字节重复此操作.

对于长度部分,规则大约是这样的(有关更多详细信息,请参阅上面的参考资料):

如果第一个长度字节的高位为零(length[0] & 0x080 == 0),则剩余的7位编码长度值(length[0] & 0x07F).

如果第一长度字节的高位是1(length[0] & 0x080 == 0x080),则剩余的7位编码长度部分(length[0] & 0x07F)的剩余字节数.其余字节表示长度值为无符号整数,MSB优先.


感谢ASN上的那些链接.我有一个TLV解码为常规TLV数据对象但我无法适应它调整只是标记和长度DOLs."长度部分"需要我进一步阅读.谢谢你的帮助.
推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有