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基本编码规则)
您显示的文本称为规范并描述了类型 (TBSCertificate)。实际上,这只是规范的一部分,因为您缺少版本、CerficateSerialNumber 等的定义..
规范是人类可读的文本。
当你想要实例化值时,你必须知道将使用哪种编码(ASN.1 定义了其中的一些,二进制和文本)
最古老的二进制编码称为基本编码规则并使用 TLV 形式。
通常情况下,作为用户,您不需要了解编码的细节。您应该使用根据规范创建一些代码的工具。
对我来说,允许在规范中使用标签是一个巨大的错误,它在 ASN.1 的一开始就犯了。它混合了 2 个完全不同的东西(规范和编码)。
后来用所谓的自动标记解决了这个问题,但损坏已经造成。
这是一个例子:
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基本编码规则)
您显示的文本称为规范并描述了类型 (TBSCertificate)。实际上,这只是规范的一部分,因为您缺少版本、CerficateSerialNumber 等的定义..
规范是人类可读的文本。
当你想要实例化值时,你必须知道将使用哪种编码(ASN.1 定义了其中的一些,二进制和文本)
最古老的二进制编码称为基本编码规则并使用 TLV 形式。
通常情况下,作为用户,您不需要了解编码的细节。您应该使用根据规范创建一些代码的工具。
对我来说,允许在规范中使用标签是一个巨大的错误,它在 ASN.1 的一开始就犯了。它混合了 2 个完全不同的东西(规范和编码)。
后来用所谓的自动标记解决了这个问题,但损坏已经造成。