ASN.1笔记——标准编码规则BER
Posted 我自横刀向天笑 去留肝胆两昆仑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASN.1笔记——标准编码规则BER相关的知识,希望对你有一定的参考价值。
1. 基本规则
BER(BasicEncoding Rules)是ASN.1中最早定义的编码规则,其他编码规则是在BER的基础上添加新的规则构成。
- BER传输语法的格式一直是TLV三元组<Type,Length, Value>.
T是Tag,L是整个类型的长度,V是类型的Value,它还可以是TLV或TLV组合
- BER传输语法是基于八位组大端编码的,高八位在左。
1.1 Tag是一个或若干个八位组
1.1.1 UniversalTag类型(值是0-30)
第七、六位指明Tag的类型,UniversalTag类型用00表示;第五位指明该类型以primitive方式编码还是constructed方式编码。
Tagvalue值是基本类型的Tag的值,例如INTEGER的Tag值是2,SEQUENCE型类Tag值是16:
ASN.1中定义的UNIVERSAL类Tag
Tag | 类型 |
---|---|
0 | BER保留 |
1 | BOOLEAN |
2 | INTEGER |
作者 :秋时
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
ASN.1语法以及在python中如何编码解码
参考技术A “ASN.1的文章本来是免费的,但是有的人一定要搞小动作,咱惹不起就只能躲着了,做了一些修改后,改为付费文章
”
应用程序在网络协议的应用层对payload数据,多使用ASN.1标准进行处理
ASN.1
ASN.1
“
Abstract Syntax Notation One,抽象语法标记,ASN.1是描述数据格式的标准方法, 它不管语言是如何执行、这些数据具体指什么、用什么类型的编码规则 ,是一种抽象的语法
”
ASN.1由两部分组成:
一部分描述信息内数据,数据类型及序列格式
另一部分描述如何将各部分组成消息
语法
例如
Report ::= SEQUENCE
author OCTET STRING,
title OCTET STRING,
body OCTET STRING,
biblio Bibliography
Report是结构体名称
SEQUENCE表示消息是由许多数据单元构成的
中括号里面是各种类型的数据单元
前三个数据单元author/title/body的类型是OCTET STRING
最后一个数据单元biblio的类型是另一个ASN.1结构体
Bibliography ::= SEQUENCE
author OCTET STRING
title OCTET STRING
publisher OCTET STRING
year OCTET STRING
数据类型
类型含义
NULL空
BOOLEAN布尔类型
INTEGER整型
REAL实数类型
BIT STRING比特串
OCTEC STRING字节串
OBJECT IDENTIFIER实体标识符
ENUMERATED枚举类型
SEQUENCE序列
SEQUENCE OF类型的序列
SET集合
SET OF类型的集合
CHOICECHOICE类型
...STRING(有很多就不一一列举)字符串类型
UTCTime时间类型
GeneralizedTime时间类型
ASN.1文件结构
例如
Foo DEFINITIONS ::= BEGIN
Question ::= SEQUENCE
id INTEGER,
question IA5String
Answer ::= SEQUENCE
id INTEGER,
answer BOOLEAN
END
解析上面的ASN.1文件的结构
ASN.1支持的编码规则
基本编码规则(BER)
规范编码规则(CER)
识别名编码规则(DER)
压缩编码规则(PER)
XML编码规则(XER)
python如何对ASN.1结构的信息编码和解码
如果我们想用python对信息进行编码,需要明确几点:
提供的ASN.1格式的数据
更多内容,请参考公-中-号, 汽车网络诊断通信
以上是关于ASN.1笔记——标准编码规则BER的主要内容,如果未能解决你的问题,请参考以下文章