[英]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.