如何解决ASN.1语法的“序列”中的数字是什么意思?
这里是一个例子:
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,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开头就犯的一个巨大错误。它混合了2种完全不同的东西(规范和编码)。
后来通过所谓的AUTOMATIC标签解决了这一问题,但造成了损害。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。