ASN.1编码规则与Bouncy Castle API实践
1. ASN.1编码方法概述
目前,有五种被认可的将ASN.1对象编码为字节流的方法:
- BER编码(Basic Encoding Rules)
- DER编码(Distinguished Encoding Rules)
- CER编码(Canonical Encoding Rules)
- PER编码(Packed Encoding Rules)
- XER编码(XML Encoding Rules)
不过,在实际应用中,我们主要关注BER编码和DER编码。
2. BER编码
BER编码遵循标签 - 长度 - 值(TLV)的约定。它提供了三种编码ASN.1对象的方法:
- Primitive definite-length :适用于非结构化类型或隐式标记的版本。编码时先对对象的标签进行编码,接着是长度,最后是内容编码。当长度小于等于127时,用一个字节表示长度;大于127时,第一个字节的第8位设置为1,其余7位表示后续包含实际长度的字节数,然后按高位字节在前的顺序依次写出长度。例如,长度为127的编码是0x7f,长度为128的编码是0x81 0x80,长度为1000的编码是0x82 0x03 0xe8。
- Constructed definite-length :长度字节的生成方式与Primitive definite-length方法相同,但关联对象标签的初始字节的第6位会被设置为1,表示这是构造类型。对于常规的结构化类型(如SEQUENCE和S
超级会员免费看
订阅专栏 解锁全文
822

被折叠的 条评论
为什么被折叠?



