程序员社区

ASN.1语法以及在python中如何编码解码

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语法以及在python中如何编码解码插图

ASN.1支持的编码规则

  • 基本编码规则(BER)
  • 规范编码规则(CER)
  • 识别名编码规则(DER)
  • 压缩编码规则(PER)
  • XML编码规则(XER)

python如何对ASN.1结构的信息编码和解码

如果我们想用python对信息进行编码,需要明确几点:

  1. 提供的ASN.1格式的数据

更多内容,请关注公-中-号,汽车网络诊断通信

赞(0) 打赏
未经允许不得转载:IDEA激活码 » ASN.1语法以及在python中如何编码解码

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区