【发布时间】:2016-01-13 12:43:21
【问题描述】:
- 如何手动读取编码 asn 文件?
- 什么是Tag-Length-Value,有好的教程吗?
在以下示例中,我阅读了每个示例,但没有为我清理,任何人都可以帮助阅读每个示例:
- 30 82 02 10 04 01 56 ...(更多字节)
第一个字节是二进制的 00110000。前两位是 00,所以类又是 0。第三位是 1,所以它是结构化的。最后五位是 10000,所以标签是十进制的 16。下一个字节是 82 十六进制,即 130 十进制,即 128 + 2,接下来的 2 个字节给出长度。它们是 02 10,以“大端”格式解释为 2*256 + 16 = 528。接下来的 528 个字节,从 04 01 56 开始,包含内容。
- df 82 02 05 12 34 56 78 90
第一个字节是二进制的 11011111。前两位是 11,所以这是第 3 类——私有。下一位是 0,所以这是原始的。其余五位全为 1,因此实际标签从第二个字节开始。第二个字节有一个前导,而第三个字节没有,所以标签是通过取这两个字节(二进制的 10000010 00000010),去掉它们的前导位得到十四位 00000100000010,并将其解释为二进制数来构造的.因此,标签是十进制的 258。下一个字节是 05,小于 128,所以这是内容的实际长度。接下来的 5 个字节(12 34 56 78 90)是内容。
- 30 80 04 03 56 78 90 00 00
第一个字节 30 是我们以前见过的。它是通用类,结构化,标签为 16。下一个字节是 80,所以长度一开始是未知的。内容是所有后续字节,直到(但不包括)前两个连续的零字节。所以内容是04 03 56 78 90,从内容中可以看出长度是5。
【问题讨论】:
-
请注意,ASN.1 有几个编码规则。您似乎在谈论 BER(基本编码规则)或 DER(可区分编码规则)。
-
基本编码规则@Henry