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 | 类型的集合 |
CHOICE | CHOICE类型 |
…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格式的数据
更多内容,请关注公-中-号,汽车网络诊断通信