ASN.1序列(OF)实际标记值

11

关于 SEQUENCE (OF) ASN.1 数据类型的标签值,我发现了很多相互矛盾的信息:

维基百科声称它既是 0x10 又是 0x30:

http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One -> 0x30

http://en.wikipedia.org/wiki/Basic_Encoding_Rules -> 0x10

根据微软的说法,它是 0x30:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb540799%28v=VS.85%29.aspx

在 Bouncycastle 的源代码中,可以找到:

public const int Sequence = 0x10;

因此,0x10和0x30之间基本上是打成平手的。你知道实际值是多少还是我漏掉了什么?

1个回答

19

一个BER编码的“标签”由几个位字段组成:

---------------------------------
| 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---------------------------------
|类别   |P/C| 标签号            |
---------------------------------
  • 序列(在通用类中)的标签号为0x10。
  • 序列是一种构造类型,因此P/C位为1。
  • 通用类为0。
  • 这使得整个八位字节为0x30。

请注意,在BER/DER/CER中编码序列有许多方法,这取决于使用的确切ASN.1。例如,某些协议可能会覆盖类别并将序列指定为应用程序特定类别,和/或如果使用隐式标记,则可能会指定自己的标签号。

您可以在这里阅读BER编码规范。


该规范的链接已经失效,您可以在这里找到最新版本:https://www.itu.int/ITU-T/recommendations/rec.aspx?rec=14472&lang=en - Hylke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接