ASN.1即抽象语法符号,用来定义应用程序数据和表示[wiki]协议[/wiki]数据单元的抽象语言。优点是独立于机器、语言及应用程序的内部表
示。适用于描述现代通信中复杂的、变化的、可扩展的数据结构。比如[wiki]3G[/wiki]和Vo[wiki]IP[/wiki]均采用了
ASN.1。
ASN.1分两大部分:语法规则和编码规则。
语法规则
1. ASN.1定义示例
Age ::= INTEGER (0..120)
User ::= SEQUENCE {
name IA5String (SIZE(1..128)),
age Age DEFAULT 18,
address IA5String OPTIONAL,
...
}
2. 简单类型
基本类型
字符串类型
对象类型
其它类型
3. 构造类型
SEQUENCE,对应于C语言中的struct
SEQUENCE OF,对应于数组
SET,类似于SEQUENCE,但不考虑分量顺序
SET OF,集合类型,每一分量类型相同,不考虑顺序
4. 类型定义
语法: typereference ::= Type
示例:
1) Counter ::= INTEGER
2) UserAccount ::= SEQUENCE {
username PrintableString,
password PrintableString,
account INTEGER
}
5. 赋值
语法: valuereference Type ::= Value
示例:
1) current Counter ::= 1234
2) myAccount UserAccount ::= {
username “tly”,
password “guesswhat”,
account 2345
}
编码规则
1. BER
1) 三种情况及其格式:
a.简单类型(Primitive),定长;
Identifier | Length | Content
b.构造类型(Constructed),定长;
Identifier | Length | I | L | C | I | L | C | ...
c.构造类型(Constructed),不定长;
Identifier | Length | I | L | C | I | L | C | EOC|
2) Identifier编码
格式: 8 7 6 5 4 3 2 1
Class | P/C | Tag number
分两种情况:
a.Tag number < 31
b.Tag number >= 31
3) Length及Content编码
分三种情况:
a.短形(L < 128),定长
b.长形(L >= 128),定长
c.不定长,仅用于构造类型
4) 示例
a.INTEGER 49
0000 0010 0000 0001 0011 0001
b.UserAccount ::= SEQUENCE {
username IA5String,
account INTEGER
}
myAccount UserAccount ::= {
username “john”,
account 129
}
0011 0000 0000 1010
0001 0110 0000 0011
0100 1010 0110 1111
0110 1000 0110 1110
0000 0010 0000 0010
0000 0000 1000 0001
2. DER
为确保编码的唯一性,出现了CER和DER两种编码方案,它们均为BER子集。其中DER只使用定长编码,CER基于不定长编码。
3. PER
在PER中,tag从不传送,length和value如果双方都知道,也不需传送。因此,其编码更精简,效率更高。
1) 格式
preamble | length | contents
preamble:只出现在ENUMERATED、SEQUENCE、SET、CHOICE四种数据结构的编码中。用来记录结构中有无扩展项(extension)、选择项(optional)或缺省项(default);
length: 对STRING、SEQUENCE OF、SET OF等数据类型进行编码时,需对其长度按对齐方式进行编码;
contents:若数据是基本结构类型,如:BOOLEAN、INTERGER、REAL、BITSTRING等,即可直接进行编码;若数据是复合结构
类型,如SEQUENCE、SET、CHOICE、SEQUENCE OF
等,则属嵌套编码,此时contents中也包含有preamble、length、contents三个部分。
2) 示例
a. cug-Index INTEGER(1..256)的值为10时,PER编码为(pad)00001001
b. error CHOICE
{
systemErr NULL,
operationErr NULL,
…
}
若error值为systemErr,则PER编码为00。
4. XER
即XML Encoding Rules,主要应用于网站开发,本文不作介绍。
=========================================
8 7 6 5 4 3 2 1 + Length + Content
-------------------------------------------------------------------------
|Class |X | Tag | |
-------------------------------------------------------------------------
Class:
0 0 Universal
0 1 Application
1 0 Context-speciatic:指Type不需传送,双方约定 IMPLICIT
1 1 prviate
X :
0 ---- primitive -----指定:content without a Structure 只有 1个Length 1个Content
1 ---- contructed -----指定:content with addition structure
(如squence,squence of , implicit squence ,implicit squence of )
(Type , Length ,Content )任意个嵌套T-L-C
Tag:
ASN.1中Tag可能超过5个Bits,但是MMS中不会出现
Length: 指Content的长度。可以任意长度,
例子:
1.单个OCTET STRING (ASN.1 key word )
Type (= OCTET STRING), Length (= 5 Octets) and Content (= 24 65 4F EF F3 hex)
T L C
- - --------------
04 05 24 65 4F EF F3
2.有上下文中的[2]IMPLICIT OCTET STRING (多[2]IMPLICIT )
T L C
- - --------------
82 05 24 65 4F EF F3
--
1 0 0 0 0 0 1 0 05 24 65 4F EF F3
--- ---------
1 0 : Context-speciatic
0 0 0 1 0: 02 primitive , value = 2
3.有上下文中的[2] OCTET STRING (多个[2] 无关键字IMPLICIT )
T L C
-----------------------
T L C
- - --------------
82 07 04 05 24 65 4F EF F3
-----------------------> OCTET STRING
82:
1 0 1 0 0 0 1 0
--- - ---------
1 0 : Context-speciatic
1 : constructed
分享到:
相关推荐
第4章 ASN.1BER编码规则 12 4.1 ASN.1BER数据值的编码结构 12 4.1.1标识符八位位组 12 4.1.2长度八位位组 13 4.1.3内容八位位组 14 4.1.4内容结束八位位组 14 4.2简单数据类型的编码 14 4.2.1 布尔值的编码 14 4.2.2...
fast_ber 用C ++ 11编写的高性能ASN.1 BER编码和解码库介绍fast_ber是用于BER编码和解码的小型轻量级库。 Fast ber放弃了一些严格的ASN.1规范一致性,可以在常见用例中提供快速的编码和解码性能设计决策简单,现代的...
asn1 - golang的Asn.1 BER 和 DER 编码库
查看BER方式编码的ASN.1文件,可以看到数据结构,tag值,16进制编码等信息
封装了基于ASN.1 的Ber编解码接口,同时提供打印log信息,使用简单方便。 封装了基于ASN.1 的Ber编解码接口,同时提供打印log信息,使用简单方便。
本国家标准包括下列文件: GBT 16262.1-2006 信息技术 ...GBT 16263.1-2006 信息技术 ASN.1 编码规则 第1部分:BER、DER、CER规范.pdf GBT 16263.2-2006 信息技术 ASN.1 编码规则 第2部分:紧缩编码规则(PER)规范.pdf
ASN.1标准文档,用来学习标准的语法知识!!!!!!!!!!!!!!
主要是介绍如何解析ASN.1 BER DER编码,一般Openssl输出和证书都会使用这类编码方式
基于Java实现的ASN.1 BER 和 DER 编码解码库
此文属国家通信标准文件,详细描述了几种编码之间的区别,并重点对BER的编码规范进行了透彻的描述
ASN.1 BER DER编码子集入门指南
本文简单介绍了OSI 抽象语法符号(ASN.1)的子集——基本编码规则(BER)和可辨别编码规则(DER)。
Asn.1编解码动态库 支持Ber/Per 提供实例 说明 例程
标准的ASN.1编码规则有基本编码规则(BER,Basic Encoding Rules)、规范编码规则(CER,Canonical Encoding Rules)、唯一编码规则(DER,Distinguished Encoding Rules)、压缩编码规则(PER,Packed Encoding ...
首先,简要介绍了ASN.1的基本概念、语法原则以及BER、PER编解码规则;然后,分析了ASN.1的应用流程和LTE协议栈需求,针对LTE协议栈设计了ASN.1编解码模块;最后,以BCCH_BCH_Message为例,对ASN.1编解码模块进行了...
ASN1豆 ASN1bean(以前称为jASN1)是Java ASN.1 BER和DER编码/解码库 有关ASN1bean的详细信息,请访问 。
PER编码应用于如LTE等多种无线RAT技术中的RRC编码。其编码规则相较于BER编码,更佳高效。
BER(Basic Encoding Rules)是ASN.1中最早定义的编码规则,在讨论详细编码规则时,我们是基于正确的抽象描述上。BER传输语法的格式一直是TLV三元组, Length, Value>也可以认为是, Length, Value>(见图4-1)。TLV每...
GBT 16263[1].2-2006 信息技术 ASN.1 编码规则 第1部分:BER、DER、CER规范.pdf GBT 16263[1].2-2006 信息技术 ASN.1 编码规则 第2部分:紧缩编码规则(PER)规范.pdf 最好和英文版对照着看!!!!