X.690 ASN.1编码规则:BER、CER、DER初识

1. 简介

ASN.1(Abstract Syntax Notation One)是一个标准的接口描述语言(Interface description language/IDL),IDL是可以在跨平台中实现序列化和反序列化的数据结构。

ASN.1只定义了抽象语法,并没有限定编码规则。当前较为流行的编码规则有:Basic Encoding Rules(BER)、Canonical Encoding Rules(CER)、Distinguished Encoding Rules(DER)。本文是基于ITU-T X.690规范初步阅读形成的一个笔记。

1.1 BER、CER、DER差异

BER是ITU-T X.690给出的传输ASN.1数据结构的一套基础编码规则,因此它的规则较为宽松和灵活,在规则范围内,发送放可以自由选择。例如一个boolean类型的true值,只要该字节非0x00即可,因此发送放可以选择0x01表示true,也可以选择0x02表示true。

DER和CER在BER基础上进一步添加限制,形成一套比BER严格的编码规则,因此DER和CER是BER的一个子集。
在这里插入图片描述

BER/CER/DER编码都是典型的TLV格式:Type-Length-Value
在这里插入图片描述

基础的TLV结构包含如下三部分:

  • Type:Value标识符,标识Value类型
  • Length:Value长度
  • Value:数据内容
    TLV允许多层嵌套,如图所示,1级Value中,嵌套1个2级TLV,2级TLV中又嵌套1个TLV队列(包含2个TLV)

DER和CER一个显著的差异在于:DER的length长度必须是明确的,而CER可以通过end-of-contents octets来表明Value结束(end-of-contents octets详见章节2.1和2.1.4)。

2.BER

2.1 基础规则

BER编码也遵循TLV结构,如下:
在这里插入图片描述
a. identifier octets
b.length octets
c.contents octets
d.end-of-contents octets
end-of-contents octets只在length octets中要求展现时,才会展现。默认不进行展现。

2.1.1 identifier octets

identifier octets包含三个部分:Class、P/C、Tag number。针对不同的Tag number又分为2种情况:

2.1.1 .1 Tag number小于31(十进制)

当ag number小于31时,identifier octets长度为1个字节,格式如下:
在这里插入图片描述

  • Class:2个bit。包含4个值
    a. 00:Universal。最常用的类型。在ITU-T X.680里定义的tag number均属于此类型。详见Tag number处表格。
    b. 01:Application。
    c. 10:Context-specific。
    d. 11:Private。
  • P/C:1个bit。标记后续contents octets是一个基础值还是一个嵌套的TLV值。
    0:Primitive。后续contents octets为基础值
    1:Constructed。后续contents octets为嵌套的TLV。
  • Tag number:5个bit。最大值为0x1F,即十进制的31。

Type中字段规范表如下:

Name Class P/C Decimal Tag number Hexadecimal Tag number
End-of-Content(EOC) Universal Primitive 0<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值