BER编码规约

BER编码规则

BER(Basic Encoding Rules)是ASN.1中最早定义的编码规则,其他编码规则是在BER的基础上添加新的规则构成

1.BER传输语法的格式是TLV三元组<Tag,Length,Value>

2.BER传输语法是基于八位组大端编码的,(没有采用Byte为单位说是为了避免不同系统上的混淆),所谓的的基于八位组大端编码就是说八位组中高位的在左,

 

3.Tag是一个或若干个八位组

①UniversalTag类型(值在0~30)

这时候用一个八位组描述Tag,第七、六位指明Tag的类型,UniversalTag类型用00表示(01表示APPLICATION,10表示CONTEXT-SPECIFIC,11表示PRIVATE),第五位指明该类型以primitive方式编码(值为0,表示原始方式)还是constructed方式编码(值为1,表示结构方式即TLV中的value也用TLV表示)4~0位表示类型值,

例如INTEGER的Tag值是12,tag类型是UniversalTag,Integer只能用primitive编码,则Tag从左到右8位组为00000010

其他UniversalTag类型值类型对应如下

 

Tag

类型

0

BER保留

1

BOOLEAN

2

INTEGER

3

BIT STRING

4

OCTET STRING

5

NULL

6

OBJECT IDENTIFIER

7

ObjectDescripion

8

EXTERNAL,INSTANCE OF

9

REAL

10

ENUMERATED

11

EMBEDDED PDV

12

UFT8String

13

RELATIVE-OID

14

保留

15

保留

16

SEQUENCE,SEQUENCE OF

17

SET,SET OF

18

NumericString

19

PrintableString

20

TeletexString,T61String

21

VideotexString

22

IA5String

23

UTCTime

24

GeneralizedTime

25

GraphicString

26

VisibleString,ISO646String

27

GeneralString

28

UniversalString

29

CHARACTER STRING

30

BMPString

31

保留

②当Tag大于30时,多个八位组编码中,第一个八位后五位为1,其余八位组最高位为1表示后续还有,为0表示Tag结束,其余是值


BER编码规约
 

 

 

4.Length表示Value部分所占八位组个数,有两种方式表示:定长方式和不定长方式

①定长方式按value的实际长度值是否超过127又分为短、长两种形式:

短:使用一个八位组,第七位为0,后七位是值则为0xxxxxxx,可知最大值为127

长:使用多个八位组,第一个八位组第七位为1,表示长形式,后七位表示后面还有多少个八位组属于length。比如value长度是169,则length为1000 0001 1010 1001

②不定长方式

length只有一个八位组固定为0x80,但是在value编码结束后以两个0x00结尾。


BER编码规约

 

 

 

关于value的细节参考http://blog.****.net/sever2012/article/details/7698297