ASN.1 SEQUENCE (OF) реальное значение тега - PullRequest
10 голосов
/ 15 октября 2011

Я нахожу много противоречивой информации о значении тега для типа данных 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

По данным Microsoft это 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 Ответ

17 голосов
/ 15 октября 2011

Кодированный «BER» «тег» состоит из нескольких битовых полей:

---------------------------------
| 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---------------------------------
|Class  |P/C| Tag Number        |
---------------------------------
  • Номер тега для последовательности (в универсальном классе) равен 0x10.
  • Последовательность представляет собой тип Constructed, поэтому бит P / C 1
  • Universal Class равен 0
  • . Это делает весь октет 0x30

. Обратите внимание, что существует множество способов.для кодирования последовательности в BER / DER / CER, это зависит от точного используемого ASN.1.например, некоторый протокол может переопределить класс и указать последовательность как класс, специфичный для приложения, и / или он может указать свой собственный номер тега, если используется неявное тегирование.

Вы можете прочитать спецификацию кодирования BER здесь

...