文章目录
一、BER 编码规则介绍
BER (基本编码规则) 是 ASN.1 标准制定的用于将数据编码为二进制格式的原始规则。这些规则在 ASN.1 术语中统称为传输语法,指定用于编码数据的确切八位字节(8 位字节)。
二、BER编码数据组成
BER 基本编码规则的格式指定了一种用于编码 ASN.1 数据结构的自描述和自定界格式。每个数据素都被编码为类型标识符、长度描述、实际数据素,以及必要时的内容结束标记。这些类型的编码通常称为类型-长度-值(TLV) 编码。但是,在 BER 的术语中,它是identifier-length-contents。这种格式允许接收者从不完整的流中解码 ASN.1 信息,而无需预先了解数据的大小、内容或语义.
Identifier octets Type | Length octets | Contents octets | End-of-Contents octets |
---|---|---|---|
Type | Length | Value | (only if indefinite form) |
三、Identifier octets Type
type 被编码成一个或多个字节,主要由 标签种类tag class,数据类型P(Primitive)/C(Constructed),tag number 组成。
结构如下:
第一个字节的前2位表示 tag class 第3位表示p/c,后边则是tag number
1. tag class 分类
tag class 有以下几种,它的值是用来区分 ASN.1 类型
类型 | 值 | 说明 |
---|---|---|
universal | 0 | 表示原始的数据类型 |
application | 1 | 只适用于一个特定的应用程序类型 |
context-specific | 3 | 根据上下文定义的类型 |
private | 4 | 私人规范中定义的类型 |
2. p/c 分类
p/c 表示数据内容是基本的数据类型还是复合的数据类型。
类型 | 值 | 说明 |
---|---|---|
Primitive § | 0 | 数据内容仅由一个数据素组成 |
Constructed © | 1 | 数据内容由多个数据素组成 |
3 tag type
4. ASN.1的原始数据类型(TAG)
数据类型 | 编码类型 | Tag number(十进制) | Tag number(十六进制) |
---|---|---|---|
End-of-Content (EOC) | Primitive | 0 | 0 |
BOOLEAN | Primitive | 1 | 1 |
INTEGER | Primitive | 2 | 2 |
BIT STRING | Both | 3 | 3 |
OCTET STRING | Both | 4 | 4 |
NULL | Primitive | 5 | 5 |
OBJECT IDENTIFIER | Primitive | 6 | 6 |
Object Descriptor | Both | 7 | 7 |
EXTERNAL | Constructed | 8 | 8 |
REAL (float) | Primitive | 9 | 9 |
ENUMERATED | Primitive | 10 | A |
EMBEDDED PDV | Constructed | 11 | B |
UTF8String | Both | 12 | C |
RELATIVE-OID | Primitive | 13 | D |
TIME | Primitive | 14 | E |
Reserved | 15 | F | |
SEQUENCE and SEQUENCE OF | Constructed | 16 | 10 |
SET and SET OF | Constructed | 17 | 11 |
NumericString | Both | 18 | 12 |
PrintableString | Both | 19 | 13 |
T61String | Both | 20 | 14 |
VideotexString | Both | 21 | 15 |
IA5String | Both | 22 | 16 |
UTCTime | Both | 23 | 17 |
GeneralizedTime | Both | 24 | 18 |
GraphicString | Both | 25 | 19 |
VisibleString | Both | 26 | 1A |
GeneralString | Both | 27 | 1B |
UniversalString | Both | 28 | 1C |
CHARACTER STRING | Constructed | 29 | 1D |
BMPString | Both | 30 | 1E |
DATE | Primitive | 31 | 1F |
TIME-OF-DAY | Primitive | 32 | 20 |
DATE-TIME | Primitive | 33 | 21 |
DURATION | Primitive | 34 | 22 |
OID-IRI | Primitive | 35 | 23 |
RELATIVE-OID-IRI | Primitive | 36 | 24 |
四、 Length octets
Length字段标识 value字段编码 的字节数,分为定长和不定长。其中定长的length指的是长度不超过 127 的短格式和长度超过 127 字节的长格式。
1、定长的短格式
2、不定长格式
3、保留格式
五、Contents octets
value 是数据内容的字节编码,如果不存在或者是虚对象的时候可能没有,比如value是NULL
六 、BER编码番外
- CER 和DER 都是BER的一种变体,他们从基本编码规则允许的编码中选择一种编码,消除了其余选项。
- X.690
X.690 是一个ITU-T(https://en.wikipedia.org/wiki/ITU-T)标准,指定了几种编码规则,主要是(BER, CER, DER )
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/98471.html