【问题标题】:Parsing PDOL for GET PROCESSING OPTIONS command in EMV transaction在 EMV 事务中为 GET PROCESSING OPTIONS 命令解析 PDOL
【发布时间】:2015-12-29 21:45:08
【问题描述】:

我正在尝试构建一个格式正确的 GET PROCESSING OPTIONS 命令以发送到非接触式 EMV 卡。 This post 非常有帮助,但我只需要了解更多细节。

在解析 PDOL 时,假设每个标签的长度为 2 个字节是否安全,然后是预期返回的数据大小?

例如,PDOL 9F66049F02069F37049F1A02 被分解为 9F66 049F02 06等各有2个字节标签,1个字节为数据值的预期长度。

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

【问题讨论】:

  • 你完成PDOL解析了吗?
  • @Olivarsham 我们最终只使用了 2 个字节,因为我们测试的所有卡都只为 PDOL 使用了 2 个字节的标签。 Michael Rolands 下面的回答肯定有助于了解如何确定标签的长度(“如果下一个标签字节的高位为 1 (tag[i] & 0x080 == 0x080),那么标签又包含一个字节。这对每个后续字节重复。”)这是一个很好的资源来了解更多关于解析 PDOL:openscdp.org/scripts/tutorial/emv/…EMV 事务:openscdp.org/scripts/tutorial/emv/index.html
  • 我们测试的一些卡有95059A039C01标签,它们只有两个字节。看起来我需要为 PDOL 编写一个单独的解析器。无论如何,谢谢!

标签: asn.1 contactless-smartcard emv tlv ber


【解决方案1】:

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

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

一个 TLV 结构(数据对象)由一个标签值、一个长度值和一个数据负载(值)组成:

+-----------+------------+------------+ |标签 |长度 |价值 | | (N 字节) | (M 字节) | (L 字节) | +-----------+------------+------------+

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

对于标签部分,规则大概是这样的(更详细的参考上面的参考资料):

  • 如果第一个标签字节的低 5 位全为 1(tag[0] & 0x01F == 0x01F),则标签至少包含两个字节。
  • 如果下一个标签字节的高位是一(tag[i] & 0x080 == 0x080),那么标签又包含一个字节。对每个后续字节重复此操作。

对于长度部分,规则大概是这样的(更多细节参见上面的参考资料):

  • 如果第一个长度字节的高位为零 (length[0] & 0x080 == 0),则其余七位编码长度值 (length[0] & 0x07F)。
  • 如果第一个长度字节的高位为 1 (length[0] & 0x080 == 0x080),则其余 7 位编码长度部分的剩余字节数 (length[0] & 0x07F)。其余字节将长度值表示为 MSB 在前的无符号整数。

【讨论】:

  • 感谢 ASN 上的链接。我有一个为常规 TLV 数据对象解码的 TLV,但我无法调整它以仅调整标签和长度 DOL。 “长度部分”需要我进一步阅读。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2014-06-28
  • 1970-01-01
相关资源
最近更新 更多