概念:
DER是BER的子集,它为每一个ASN.1类型定义一种唯一的编码方案。
DER与BER的区别:
DER在BER的基础上增加了如下限制:
长度小于等于127,必须使用短型长度表示法。
长度大于127,必须使用长型长度表示法,并且要尽可能的短。
对于简单的string类型以及在其基础上隐性标签生成的类型使用简单定长表示法。
对于结构化类型以及在其基础上隐性标签生成的类型以及所有的显示类型使用结构化定长表示法。
简单定长表示法和结构化类型表示法的区别是在TLV的T中bit6是0还是1。
DER的组成:
无论什么类型它的DER编码都是有四部分组成:
类型字段tag 长度字段length 值字段value 结束表示字段
即T L V
类型字段:
由一个字节(即八个二进制位)组成。
bit8 bit7用来表示tag类型,universal是00 application是01 context-specific是10 private是11
bit6表示结构化位,0代表简单类型,1代表结构类型
bit5-bit1表示tag值,tag值可以查表获得。
长度字段(以字节为计算单位):
长度字段分为两种:小于等于127和大于127
小于等于127:用一个字节表示。bit8=0,bit7-bit1表示长度值。
例子:38表示为00100110
大于127:由多个字节组成
第一个字节:bit8=1,bit7-bit1表示存放长度所占字节数(通俗的讲就是后面还有几个字节)
其余字节:存放长度值
例如:201表示为10000001 11001001
长度值不定:用0x80表示。
值字段:
不同的类型其值不同,但归根结底类型都是二进制,或十进制,或十六进制 ,或者是ASCLL字符,将他们转换为16进制表示出来即可。
结束标识字段(不在TLV之中):
两个字节,只有在长度值不定时才会出现。表示为0x000x00