ASN.1学习

ASN.1 全称 Abstract Syntax Natation One. 是一个用来描述抽象类型抽象数据的语法. 类似于 XML, JSON 等, 主要用于编码数据以便于在网络中交换数据. 比如, X509 证书.

Basic Encoding Rules —— BER

1、Primitive, definite-length encoding(基本数据类型,除字符串以外均使用这种编码方式)

+------------+--------+----------+
| identifier | length | contents |
+------------+--------+----------+

对于identifer,有两种格式:
1)low tag number form
2)heigh tag number form


对于 length,也有两种格式:
1)short form
2)long from

2、Contructed, definite-length encoding(这种编码方式用于编码复杂类型和简单类型中的字符串类型,其编码长度已知)
编码形式和Primitive, definite-length encoding类似。除了 identifier 字段的第一个字节的 bit6 为1,用来表示复杂类型。

3、Contructed, identifier-length encoding(这种编码方式用于编码复杂类型和简单类型中的字符串类型,且长度未知)
+------------+--------------+----------+----------------------------+
| identifier | length(0x80) | contents | end-of-contents(0x00,0x00) |
+------------+--------------+----------+----------------------------+

1)length 字段的值为0x80,end-of-contents 字段的值为两个字节的0,表示该编码方式为不定长编码。其余字段的编码与 Contructed, definite-length encoding 类似。
   

Distinguished Encoding Rules —— DER
DER 编码在 BER 编码的规则之上添加了如下限制:
1)当编码长度在 0-127 之间时, 必须使用 short form 形式编码 Length 字段
2)当编码长度大于 128 时, 必须使用 long form 形式且应使用最少的字节对长度进行编码,也就是说如果长度为192, 那么 Length 字段只能占两个字节. 第一个字节为0x81, 表示 Length 3字段使用 Long form, 且紧接着只有一个字节用于编码长度信息. 第二个字节为 0xc0, 用来表示长度为 192
3)对于简单字符串类型, 必须使用 primitive, definite-length 进行编码
4)对于复杂类型, 必须使用 constructed definite-length 进行编码

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值