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 之间的平局。你知道真正的价值是还是我错过了什么?

4

1 回答 1

18

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

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

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

您可以在此处阅读 BER 编码规范

于 2011-10-15T13:52:46.727 回答