解码 BER TLV
Posted
技术标签:
【中文标题】解码 BER TLV【英文标题】:Decoding 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 数据,要么是您自己对它的解释不正确。 【参考方案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
【讨论】:
以上是关于解码 BER TLV的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试 - TLV解码(Java) | 机试题+算法思路+考点+代码解析 2023