ASN.1 DER中IMPLICIT SEQUENCE编码正确性及标识方法问询
编码正确性验证
你给出的DER编码结果完全正确,逐字节拆解验证如下:
30 0B A6 09 13 02 62 65 13 03 70 61 69
30 0B:外层BuiltInStandardAttributes的SEQUENCE标签(UNIVERSAL 16,构造类型),长度11字节,和后续内容长度匹配。A6 09:organizational-unit-names字段的[6] IMPLICIT标签:因为被隐式标记的原类型OrganizationalUnitNames是构造类的SEQUENCE OF,所以标签为上下文构造类0xA0 | 0x06 = 0xA6,长度9字节,和后续内容长度匹配。- 后续内容直接是SEQUENCE OF的两个元素:
13 02 62 65:PrintableString类型标签0x13,长度2,值为be,正确。13 03 70 61 69:PrintableString类型标签0x13,长度3,值为pai,正确。
隐式标签的编码规则就是直接替换被标记类型原本的外层标签,不会额外嵌套类型原标签的头:如果是EXPLICIT标记,需要在A6 09后面再加一层30 07的SEQUENCE头,总长度会多2字节,你当前的编码没有这层冗余,是标准的IMPLICIT DER编码。
内层SEQUENCE的IMPLICIT指定方式
你当前的ASN.1写法已经正确指定了隐式属性,不需要额外修改,相关规则如下:
- IMPLICIT是字段级的标签属性,必须和自定义标签绑定,只需要在引用类型的字段声明处标注即可,不需要修改
OrganizationalUnitNames这个内层SEQUENCE本身的类型定义。 - 你写的
organizational-unit-names [6] IMPLICIT OrganizationalUnitNames OPTIONAL已经明确表示:该字段用上下文类标签号6,隐式替换OrganizationalUnitNames原本的UNIVERSAL SEQUENCE标签,类型本身的内容编码结构保持不变。 - 不要在
OrganizationalUnitNames的类型定义上单独加IMPLICIT标记,没有绑定自定义标签的IMPLICIT属于ASN.1语法错误。
内容的提问来源于stack exchange,提问作者FaisalM
相关产品推荐
相关产品推荐

