ASN.1

来源:互联网 发布:小米手机网络重置 编辑:程序博客网 时间:2024/05/16 05:46
ASN.1

是描述数据的表示,编码,传输,解码的灵活的记法。它提供一套正式,无歧义和精确的规则以描述独立于特定计算机硬件的对象结构。ASN.1本身只定义了表示信息的抽象语法,但是没有限定其编码的方法。

简单类型包含BIT STRING ,BOOLEAN,INTEGEG,NULL,OBECT IDENTIFIER,OCTET STRING PrintableString,UTCTime GeneralizedTime等。

构造类型包含SEQUENCE,SEQUENCE OF,SET,SET OF。

TLV

可以说ASN.1解决的是高层设计者之间的交流问题,编码方法要解决的是机器间的交流问题。

编码的作用就是将各种用ASN.1定义的数据类型的值对应到比特流,以便在不同通信实体间传递,而且使得各通信实体对于所传递的信息理解没有歧义。TLV方式可以完整表示特定类型的数据。解码时,首先识别数据的类型,即可可选定处理的方法;然后得到数据的长度,即可进行处理的准备工作;最后就可以正确的得到数据本身的值。

"TLV"方式的编码很多,如Basic Encoding Rules(BER)和Distinguished Encoding Rules(DER),CER等。


BER

ASN.1的基本编码规则定义了一种或多种把任意ASN.1值表示成字节字符串的方法,缩写为BER。(当然还有其他的方法,但是BER是OSI中转换这些值的标准)。使用BER,一个ASN.1的值有三种编码方法,选择哪种取决于值的类型和值的长度是否已知。这三种方法是:简单定长编码,结构化定长编码,及结构化不定长编码。

DER

DER是BER的子集,它定义了使用一个octet string来表示任何ASN.1值的编码方法。DER用于需要使用唯一的octet string编码的应用程序,例如根据一个ASN.1编码来计算数字签名。DER在X.509的第8.7节定义。

DER在第3节给出的规则基础上增加了如下限制:

1 如果长度在0-127之间,必须使用短型长度表示法。

2 如果长度大于等于128,必须使用长型长度表示法。并且长度必须使用尽可能少的字节表示。

3 对于简单string类型和在其基础上使用隐式标签生成的类型,必须使用简单定长编码方法。

4 对于结构化类型和在其基础上使用隐式标签生成的类型,及在任何类型基础上使用显式标签生成的类型,必须使用结构化定长编码方法。

PEM

PEM编码也是密钥对较常用的编码方式,openssl则是以PEM编码为主,相对DER对人可读性更强,以BASE64编码呈现,外围包上类似-----BEGIN RSA PRIVATE KEY-----。


0 0