簡體   English   中英

ASN.1 語法的“序列”中的數字是什么意思?

[英]What do the numbers within a `sequence` of the ASN.1 syntax mean?

下面是一個例子:

 TBSCertificate  ::=  SEQUENCE  {
     version         [0]  EXPLICIT Version DEFAULT v1,
     serialNumber         CertificateSerialNumber,
     signature            AlgorithmIdentifier,
     issuer               Name,
     validity             Validity,
     subject              Name,
     subjectPublicKeyInfo SubjectPublicKeyInfo,
     issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                          -- If present, version must be v2 or v3
     subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                          -- If present, version must be v2 or v3
     extensions      [3]  EXPLICIT Extensions OPTIONAL
                          -- If present, version must be v3
     }

數字[0] , [1] , ... 是什么意思,什么時候需要它們,沒有這樣的數字意味着什么?

它們被稱為標簽號,當使用 TLV(標簽長度值)形式(例如 ASN.1 基本編碼規則)時,它們被用來(連同后面的單詞 EXPLICIT 或 IMPLICIT)對 TBSCertificate 值進行編碼/解碼

您顯示的文本是調用規范並描述類型(TBSCertificate)。 實際上,這只是規范的一部分,因為您缺少 Version、CerficateSerialNumber 等的定義。

規范是人類可讀的文本。

當你想要實例化值時,你必須知道將使用哪種編碼(ASN.1 定義了其中的一些,二進制和文本)

最古老的二進制編碼稱為基本編碼規則並使用 TLV 形式。

通常,作為用戶,您不需要了解編碼的細節。 您應該使用根據規范創建一些代碼的工具。

對我來說,在規范中允許標簽是在 ASN.1 一開始就犯的一個巨大錯誤。 它混合了兩種完全不同的東西(規范和編碼)。

后來通過所謂的自動標記解決了這個問題,但損壞已經造成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM