大岭山镇网站建设公司,做网站和优化的公司,企业网站建设信息管理平台,云南网站设计流程文章目录 一、BER 编码规则介绍二、BER编码数据组成三、Identifier octets Type1. tag class 分类2. p/c 分类3 tag type4. ASN.1的原始数据类型#xff08;TAG#xff09; 四、 Length octets1、定长的短格式2、不定长格式3、保留格式 五、Contents octets六 、BER编码番外 … 文章目录 一、BER 编码规则介绍二、BER编码数据组成三、Identifier octets Type1. tag class 分类2. p/c 分类3 tag type4. ASN.1的原始数据类型TAG 四、 Length octets1、定长的短格式2、不定长格式3、保留格式 五、Contents octets六 、BER编码番外 一、BER 编码规则介绍
BER (基本编码规则) 是 ASN.1 标准制定的用于将数据编码为二进制格式的原始规则。这些规则在 ASN.1 术语中统称为传输语法指定用于编码数据的确切八位字节8 位字节。
二、BER编码数据组成
BER 基本编码规则的格式指定了一种用于编码 ASN.1 数据结构的自描述和自定界格式。每个数据元素都被编码为类型标识符、长度描述、实际数据元素以及必要时的内容结束标记。这些类型的编码通常称为类型-长度-值(TLV) 编码。但是在 BER 的术语中它是identifier-length-contents。这种格式允许接收者从不完整的流中解码 ASN.1 信息而无需预先了解数据的大小、内容或语义.
Identifier octets TypeLength octetsContents octetsEnd-of-Contents octetsTypeLengthValue(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 类型
类型值说明universal0表示原始的数据类型application1只适用于一个特定的应用程序类型context-specific3根据上下文定义的类型private4私人规范中定义的类型
2. p/c 分类
p/c 表示数据内容是基本的数据类型还是复合的数据类型。
类型值说明Primitive §0数据内容仅由一个数据元素组成Constructed ©1数据内容由多个数据元素组成
3 tag type
tag type 数据的标识是固定的。在asn.1的原始数据类型表里可以看到。 如果定义的数据类型不是 Universal 的数据类型那么此时需要用到更多的字节序列如 Octet2。在使用这类标记的时候要将 Octet1 的第 5 到第 1 个二进制位置为 1 如果 Octet2 后面还有 Octet3那么 Octet2 的第 8 个二进制位应该为 1。
4. ASN.1的原始数据类型TAG
数据类型编码类型Tag number(十进制)Tag number(十六进制)End-of-Content (EOC)Primitive00BOOLEANPrimitive11INTEGERPrimitive22BIT STRINGBoth33OCTET STRINGBoth44NULLPrimitive55OBJECT IDENTIFIERPrimitive66Object DescriptorBoth77EXTERNALConstructed88REAL (float)Primitive99ENUMERATEDPrimitive10AEMBEDDED PDVConstructed11BUTF8StringBoth12CRELATIVE-OIDPrimitive13DTIMEPrimitive14EReserved15FSEQUENCE and SEQUENCE OFConstructed1610SET and SET OFConstructed1711NumericStringBoth1812PrintableStringBoth1913T61StringBoth2014VideotexStringBoth2115IA5StringBoth2216UTCTimeBoth2317GeneralizedTimeBoth2418GraphicStringBoth2519VisibleStringBoth261AGeneralStringBoth271BUniversalStringBoth281CCHARACTER STRINGConstructed291DBMPStringBoth301EDATEPrimitive311FTIME-OF-DAYPrimitive3220DATE-TIMEPrimitive3321DURATIONPrimitive3422OID-IRIPrimitive3523RELATIVE-OID-IRIPrimitive3624
四、 Length octets
Length字段标识 value字段编码 的字节数分为定长和不定长。其中定长的length指的是长度不超过 127 的短格式和长度超过 127 字节的长格式。
1、定长的短格式
a、前面的第一位是0后边的7个位代表长度因为7个位的2进制是0111 1111最大也就是127所以要求短格式不能超过127 b、定长长格式:最高位是1后面的7个位表示长度值占用的字节数然后跟上长度值。
例如长度为300转换成2进制是0000 0001 0010 1100占用2个字节那么编码后应该是 1 000 0010 0000 0001 0010 1100 总共占用3个字节用16进制表示 0x82 0x01 0x2c
2、不定长格式
根据图上看到最高位为1后边7个位全是0那就是1000 0000 也就是0x80 固定的数值 在value结尾处标记2个0x00代表内容结束因为是不定长必须知道内容在网络上传输时读到啥时候结束。
3、保留格式
最高位为1后边7个为全是10xFF表示 同时在数据内容结尾处用2个0x00标记代表着内容结束。
五、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