2011-10-15 37 views
8

我发现关于该序列(OF)ASN.1数据类型标记值中的很多矛盾的信息:ASN.1 SEQUENCE(OF)真正的标记值

维基百科声称它是既为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之间的纽带。你知道真正的价值是或者我错过了什么吗?

回答

13

甲BER编码的“标签”是由几个比特字段:

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

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

可以读取BER编码规范here

+0

感谢详细的解释! – Krassi