当前位置:首页 >> 信息与通信 >>

ASN.1标准编码规则BER


ASN.1标准编码规则 BER

一.基本规则
BER(Basic Encoding Rules)是 ASN.1中最早定义的编码规则,其他编码规则是在 BER 的基础上 添加新的规则构成。 1.BER 传输语法的格式一直是 TLV 三元组<Type,Length, Value>.

T 是 Tag,L 是整个类型的长度

,V 是类型的 Value,它还可以是 TLV 或 TLV 组合

2.BER 传输语法是基于八位组大端编码的,高八位在左。 3.Tag 是一个或若干个八位组 (1).Universal Tag 类型(值是0-30) :

第七、六位指明 Tag 的类型,Universal Tag 类型用00表示;第五位指明该类型以 primitive 方式编码还是 constructed 方式编码。

Tag value 值是基本类型的 Tag 的值,例如 INTEGER 的 Tag 值是2,SEQUENCE 型类 Tag 值是16:
ASN.1中定义的 UNIVERSAL 类 Tag Tag 0 1 2 3 4 类型 BER 保留 BOOLEAN INTEGER BIT STRING OCTET STRING

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

NULL OBJECT IDENTIFIER ObjectDescripion EXTERNAL,INSTANCE OF REAL ENUMERATED EMBEDDED PDV UFT8String RELATIVE-OID 保留 保留 SEQUENCE,SEQUENCE OF SET,SET OF NumericString PrintableString TeletexString,T61String VideotexString IA5String UTCTime GeneralizedTime GraphicString VisibleString,ISO646String GeneralString UniversalString CHARACTER STRING BMPString 保留

(2).当 Tag 大于30时,多个八位组中编码,第一个八位组后五位全部为1,其余的八位组最高位为1表示后 续还有,为0表示 Tag 结束。

第一个八位组高二位的取值:00表示 Universal,01表示 APPLICATION 类型,10表示 context-specific,11 表示 PRIVATE 类型 2.BER 编码中 Length 表示 Value 部分所占八位组的个数,有两大类:定长方式(Definite Form)和不定 长方式(Indefinite Form) (1).定长方式 定长方式中,按长度是否超过一个八位,又分为短、长两种形式: 短:类型长度大于等于0个八位,小于等于127

长:类型长度大于等于127个八位,小于等于256^126-1

第一个八位组的低七位指明整个 L 所占用的八位组个数,后续八位组表示 V 的长度 (2).不定长方式 Length 所在八位组固定编码为0x80, 但在 Value 编码结束后以两个0x00结尾。 这种方式使得可以在编码没 有完全结束的情况下,可以先发送部分消息给对方。

二.各类型的编码
以 UNIVERSALTag 和短型 Value 为例,讨论各种类型的 BER 编码,重点关注 Value 部分。 1.BOOLEAN 只能以 primitive 方式编码,FALSE 的编码为(n10表示10进制) :

TRUE 的编码(任何不是全0都可以)为:

或者:

2.NULL 只能以 primitive 方式编码,且只有一个值:

3.INTEGER 只能以 primitive 方式编码。 (1).对于正数,如果最高比特位为0则直接编码;如果为1,则在最高比特位之前增加一个全0的八位组。 最高位为0:

最高位为1:

(2).对于负数,先取绝对值,再取反,最后加1。 4.ENUMERATED 按照整数值的规则编码。 5.REAL (1).0:

(2).正无穷大:

(3).负无穷大:

(4).基于10进制且以10为底的指数方法:

NR 有三个可选值: NR1:在 V 中底6位用000001表示,表示不带小数和指数的简单10进制整数。 例如4902,#4902,##4902,+4902等,#表示空格,每个字符占一个8位组。 NR2:在 V 中底6位用000010表示,表示还小数点的10进制数 例如4902.00,#4902.0,1.0 NR3:在 V 中底6位用000011表示,在 NR2的基础上扩展,用字符‘E’代表以10为底的指数 例如+0.56.0E2,0.2E-3 实数的表示方法在 ISO6093标准文档中做了详细定义。 (5).基于2进制的编码方式 这种方式比较奇怪,先放一边 6.BIT STRING 可以 primitive 方式编码或者 constructed 方式编码。 (1).Primitive 方式: 例如'1011011101011'B 的编码

V 中第一个八位取值0-7,表示在这个 V 后面补的0的个数

如果 BITSTRING 的值为空,则编码时,长度为1,补充的八位组为全0。

(2).constructed 方式

'1011011101011'B 的编码

L 的最高位是1,说明是不定长方式编码, 中嵌套两个 TLV,以 Primitive 方式表示这个值的高八位和低八位, V 最后以两个全为0的八位结尾 7.OCTET STRING 与 BITSTRING 类似,但是不需要增加表征补充位个数的八位组。 8.OBJECT IDENTIFIER

只能以 primitive 方式编码。编码时,第一个八位组采用公式:first_arc* 40+second_arc。如果一个数
大于127,就采用多个8位表示,最高位用1表示后续还有 octet,用0表示后续没有。 例:对{isomember-body f(250) type-org(1) ft(16) asn1-book(9)}的编码为

注意对250的编码方式,1× 128+122。 9.RELATIVE-OID 与 OBJECTIDENTIFIER 类似,但是不需要对注册树前两段进行特殊处理。 10.字符串和日期 和 OCTETSTRING 编码类似,只是 Tag 不同。 11.SEQUENCE 只能用 constructed 形式。对每个成员均以 TLV 方式编码,且顺序要与定义的一致。

v SEQUENCE { age INTEGER, single BOOLEAN } ::={age 24, single TRUE }的编码为:

注意 BOOLEAN 类型,非0表示真。

忽略扩展符'...',对扩展的内容则按顺序编码。 12.SET

与 SEQUENCE 类似,但是成员顺序有发送者决定。 13.SEQUENCEOF SEQUENCEOf 的 Tag 与 SEQUENCE 相同,编码规则也相同。 14.SETOF 与 SEQUENCEOf 类似。 15.CHOICE 严格说 CHOICE 类型在编码中并不存在,只是在描述中体现一种关系。编码时,是按照具体被选择的成员 编码规则编码的。 例如 amousCHOICE { name VisibleString, nobody NULL } ::= name:"Perec"

的编码为:

Tag 为26,上选定成员的类型的 tag。 如果 CHOICE 类型显式(EXPLICIT)指定了 Tag,那么该 Tag 应当以 constructed 方式编码。 忽略扩展符'...',对扩展的内容则按顺序编码。 16.Tag 对编码的影响 (1).如果 Tag 是隐式的,或者在模块定义中声明了 IMPLICITTAGS 或者 AUTOMATICTAGS,则只有关键字 IMPLICIT 左侧的 Tag 才会被编码。如:

v [1]IMPLICIT INTEGER ::= -38的编码为:

(2).如果一个类型的 Tag 是显式(EXPLICIT)的(或者在模块定义中声明了 EXPLICITTAGS) ,则要以 constructed 方式编码三元组系列。

如 v[APPLICATION 0] EXPLICIT INTEGER ::= 38的编码为:

17.子类型约束 子类型约束是在 BER 编码规则之后被引入 ASN.1的,在编码规则中不能体现约束。 18.EXTERNAL 该类型不推荐使用,略。 19.INSTANCEOF 定义为:

vINSTANCE OF TYPE-IDENTIFIER ::= { type-id{iso member-body f(250) type-org(1) ft(16) asn1-book(9) chapter18(5)integer- type(0)},

valueINTEGER:5 } 的编码应当和如下一个 SEQUENCE 类型的值类似: { direct-reference{iso member-body f(250) type-org(1) ft(16) asn1-book(9) chapter18(5)integer-type(0)}, encodingsingle-ASN1-type:INTEGER:5 }

编码为:

为什么 valueINTEGER:5的编码采用 constructed 方式,处层 TLV 的 Tag 为上下文类型,值为0? 20.EMBEDDEDPDV EMBEDDEDPDV 的编码和其等效的 SEQUENCE 结构编码类似。其嵌入部分的编码,应该是遵循 identification 成员指定的规则。 21.CHARACTERSTRING CHARACTERSTRING 的编码和其等效的 SEQUENCE 结构编码类似。其嵌入字符串部分的编码,应该是 遵循 identification 成员指定的规则。 22.InformationObjects and Object Sets 信息对象和对象集合永远都不编码。如前所述,传递他们所包含信息的途径是在值定义或者类型定义中引 用他们。这样的结果,不是在编码中出现了这些信息,而是 ASN.1编译器在生成编解码器时,会按照这些 信息生成相应的约束表。 23.ValueSet 值集合的编码按照对应类型的编码规则进行。

三.BER 编码规则的属性
1.BER 编码规则是机器无关 2.BER 的传输语法是十分冗长。 和 L 很多情况下都是可以省略, ,T 但是这种冗余信息能很好的保藏抽象语 法结构。 3.BER 传输语法能容易升级而且向上兼容。如每个类型都可以用 CHOICE 来代替


相关文章:
ASN.1标准编码规则BER
ASN.1标准编码规则BER_信息与通信_工程科技_专业资料。ASN.1标准编码规则BER 工业自动化制造报文规范 标准编码规则 BERASN.1标准编码规则 BER 一.基本规则 BER(Ba...
asn.1和基本编码规则
PKIX、PKCS 和 X.509 也是我们所 熟悉的标准,它们也是基于 ASN.1 的。 ? 传统通信网络: ASN.1 和基本编码规则(BER)已经在主要通信领域流行了很长一段时间,...
ASN.1BER编解码系统与设计ASN.1编码规则详解(最全最经典)
ASN.1BER编解码系统与设计ASN.1编码规则详解(最全最经典)_计算机软件及应用_IT/计算机_专业资料。编解码,通讯技术,ASN.1,BER目录 基于 ASN.1 BER 规约的编解...
A-S-N编码规则
PKIX、PKCS 和 X.509 也是我们所 熟悉的标准,它们也是基于 ASN.1 的。 传统通信网络: ASN.1 和基本编码规则(BER)已经在主要通信领域流行了很长一段时间,所 ...
BER编码规则和传输语法
3 3.1 编码规则和传输语法 BER 3.1.1 基本规则 BER(Basic Encoding Rules)是 ASN.1 中最早定义的编码规则,在讨论详细编码规则时,我们是基于正确的抽象 描述上...
1334-6编码规范
通过将一套编码规则应用于 ASN.1 表示法定义的类型数值取及,这些编码规则的...时间以来只有一套—BER(标准编码规 则)被标准化,这主要是因为 BER 经常使用于...
BER&PER编码规则
BER&PER编码规则_信息与通信_工程科技_专业资料。简单介绍了Ber和Per的ASN.1的...否则,字符序列 ("c1"|"c2"|...|"cn")按照标准[ISO646] 或 [ISO10646-...
ASN[1].1编码问题详解
1.1 1.1 ASN.1 简介 ASN.1 成功的一个主要理由是它采用了一些如 BER(Basic Encoding Rules)或新制定的 PER(Packed Encoding Rules)这样的标准化编码规则,...
ASN.1探索 - 3 编码规则与传输语法(3 - PER)
ASN.1 本章主要介绍 BER 和 PER 两种编码规则及其衍生规则. 3.3 PER BER ...否则,字符序列("c1"|"c2"|...|"cn")按照标准 [ISO646] 或 [ISO10646-...
asn.1的ber编码
asn.1ber编码_计算机软件及应用_IT/计算机_专业资料。asn.1ber编码,ASN....ASN.1 分两大部分:语法规则和编码规则。 语法规则 1. ASN.1 定义示例 Age ...
更多相关标签:
asn.1 编码规则详解 | asn.1编码规则 | asn.1 der编码规则 | ber编码规则 | asn.1 ber | 标准件编码规则 | 标准编码规则 | 企业标准编码规则 |