【问题标题】:Decoding BER TLV解码 BER TLV
【发布时间】:2021-02-21 04:39:10
【问题描述】:

我在解码此 TLV 时遇到问题

模板标签 (7001) 2 个字节

长度标签(0020)2字节

值是另一个 TLV

标签(e101)长度(000f)值(373834313938353338353236313430)

标签(e102)长度(0009)值(0009303931383631393038)

70010020e101000f373834313938353338353236313430e1020009303931383631393038

当我尝试任何 TLV 解码器时,它只会将模板标签读取为 1 个字节,然后将错过其余部分。你能就如何解析它提出建议吗?顺便说一句,我接收到 Base64String 的数据,然后我转换为 HEX

【问题讨论】:

  • 您没有提到任何特定的 TLV 解码器,但您对 LENGTH 的解释是有缺陷的。如果存在长度字段,则第一个字节 0020 将被解释为 00,而 20 将被解释为下一个标签。有关详细信息,请参阅 ISO 7816 第 4 部分。
  • 这可能是某人写的,他想写类似 TLV 的东西,但对规则没有足够的了解。因此格式似乎是专有的,我不知道你会找到合适的解析器
  • 这个问题用 asn.1 标记。在 ASN.1 BER (ITU-T X.690) 中,0x70 表示应用程序,构造标签为 16。所以标签确实是 1 个字节。数据要么是错误的(如果您期待别的),要么不是 X.690 BER 数据,要么是您自己对它的解释不正确。

标签: smartcard asn.1 tlv


【解决方案1】:

BER 解码器按如下方式解释此 TLV 流:

byte 1,     byte 2,     byte 3,     byte 4 
T=01110000, L=00000001, V=00000000, <end> 
                          ^ inner TLV, starts with T=0 and no place for LV
              ^ length of the V is 1 byte (!!! this why it ends prematurely !!!)
     ^ 10000=SEQUENCE or SEQUENCE OF tag 16
    ^ 1=constructed tag
  ^ 01=APPLICATION tag

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    相关资源
    最近更新 更多