我在學習語法ASN.1,我已經讀了很多相關材料在線:ASN.1序列混亂
http://www.itu.int/rec/T-REC-X.690-200811-I/en
http://luca.ntop.org/Teaching/Appunti/asn1.html
http://www.obj-sys.com/asn1tutorial/node11.html
我非常困惑於ASN.1 SEQUENCE
類型的編碼。總的來說,我意識到SEQUENCE
基本上是一個聚合 - 在大多數編程語言中我們稱之爲OBJECT或INSTANCE。它基本上是名稱/值對的列表,類似於JSON對象。但與JSON對象不同,ASN.1 SEQUENCE
具有隱式SCHEMA,因爲它是「類」的實例。
因此,對於SEQUENCE
類/模式可能是這樣的:
{
name UTF8String
age INTEGER
}
以及架構的INSTANCE可能是SEQUENCE
{
"John Smith"
42
}
但我完全糊塗了至於如何分辨實際BER編碼中CLASS和INSTANCE之間的差異。事實上,我很困惑,我甚至不確定ASN.1 SEQUENCE
應該是一個類定義還是一個類的實例。
文檔似乎暗示它是一個實例:
8.9序列值
8.9.1序列值的編碼的編碼應是建造。
8.9.2內容字節必須在 定義由一個數據值從每個在序列類型的ASN.1定義 列出的類型的完整編碼的,在他們出現的次序,除非該類型被關鍵字OPTIONAL 或關鍵字DEFAULT引用。
8.9.3的數據值的編碼可以,但不需要,存在對於將其與關鍵字OPTIONAL或關鍵字 DEFAULT引用的類型。如果存在,它將出現在對應於ASN.1定義中的類型外觀的點 的編碼中。
所以看起來SEQUENCE只是一個數據值的列表,它必須對應某個模式(類)。但ASN.1沒有CLASS
類型,那麼如何獲得實際的類,那麼您知道給定的SEQUENCE是什麼類是一個實例?