2011-10-15 21 views
8

Tôi đang tìm kiếm rất nhiều thông tin mâu thuẫn về giá trị thẻ cho SEQUENCE (OF) ASN.1 datatype:ASN.1 SEQUENCE (OF) giá trị thẻ thực

Wikipedia tuyên bố nó là cả 0x10 và 0x30:

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

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

Theo Microsoft nó là 0x30:

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

Và trong nguồn BouncyCastle người ta có thể tìm thấy:

public const int Sequence = 0x10; 

Vì vậy, nó là cơ bản một tie giữa 0x10 và 0x30. Bạn có biết rằng giá trị thực là hoặc tôi thiếu một cái gì đó?

Trả lời

13

Một BER mã hóa "tag" được tạo thành từ một số lĩnh vực bit:

 
--------------------------------- 
| 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 
--------------------------------- 
|Class |P/C| Tag Number  | 
--------------------------------- 
  • Số thẻ cho một trình tự (trong lớp Universal) là 0x10.
  • Một chuỗi là một loại Xây dựng, làm cho P/C bit 1
  • phổ Class là 0
  • Điều này làm cho toàn bộ octet 0x30

Lưu ý rằng có nhiều cách để mã hóa một chuỗi trong BER/DER/CER, nó phụ thuộc vào chính xác ASN.1 được sử dụng. ví dụ. một số giao thức có thể ghi đè lên lớp và chỉ định một chuỗi là lớp Ứng dụng cụ thể và/hoặc nó có thể chỉ định Số thẻ của riêng nó nếu sử dụng gắn thẻ Implicit.

Bạn có thể đọc thông số mã hóa BER here

+0

Cảm ơn bạn đã giải thích chi tiết! – Krassi