`
xumingyong
  • 浏览: 182366 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

asn.1的ber编码

阅读更多


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

 

 

分享到:
评论
1 楼 young_suse 2009-05-18  
博主概括的太简洁了,读起来很吃力啊,应该是我基础不够吧,等看了其他详细点的介绍,再回过来看看。

相关推荐

    ASN.1 ber编码文件查看工具

    "ASN.1 BER编码文件查看工具"是一种专门用于解析和展示BER编码的ASN.1文件的软件。它允许用户深入了解BER编码的数据结构,揭示隐藏在16进制编码背后的逻辑和信息。通过这种工具,你可以看到每个元素的tag值,这是...

    ASN.1BER编解码系统与设计ASN.1编码规则详解(最全最经典).doc

    **ASN.1 BER编码规则:** 1. **数据值的编码结构**:每个数据值由标识符、长度和内容组成,可能还有内容结束标记。 - **标识符八位位组**:表示数据类型的编码。 - **长度八位位组**:指示内容的长度,可变长或...

    基于ASN.1的 ber编码接口封装及实现

    总结起来,"基于ASN.1的Ber编码接口封装及实现"涉及到的主要知识点包括:ASN.1数据表示法、Ber编码规则、软件封装原理、日志记录在开发中的作用,以及如何处理和验证ASN.1数据报文。理解和掌握这些内容,对于开发...

    Go-asn1-golang的Asn.1BER和DER编码库

    Go语言作为一种强大的系统编程语言,其生态系统中包含了许多工具和库,其中之一便是`asn1`,这是一个用于处理Asn.1 BER(Basic Encoding Rules)和DER(Distinguished Encoding Rules)编码的库。 `asn1`库在Golang...

    fast_ber:C ++ 11 ASN.1 BER编码和解码库

    fast_ber 用C ++ 11编写的高性能ASN.1 BER编码和解码库介绍fast_ber是用于BER编码和解码的小型轻量级库。 Fast ber放弃了一些严格的ASN.1规范一致性,可以在常见用例中提供快速的编码和解码性能设计决策简单,现代的...

    ASN.1-berviewer (编解码查看器)

    "ASN.1-berviewer (编解码查看器)"是一个专门设计用于解析和查看ASN.1 BER编码文件的工具。它可以帮助用户理解和分析那些用BER编码格式存储的数据,这对于调试、测试或者理解使用ASN.1编码的通信协议非常有用。...

    ASN.1编码规则详解(最全最经典).doc

    4. 编码规则:ASN.1 提供了多种编码规则,如 BER、CER、DER、PER和 XER 等,以描述数据的值的传送语法。 ASN.1 的应用场景: 1. 数据传输:ASN.1 可以发送各种形式的信息(音频、视频、数据等等),并且它可以快速...

    ASN.1-BER规则.pdf

    标题中的"ASN.1-BER规则.pdf"是一个关于ASN.1(抽象语法标记一号)基本编码规则(BER)的文档,通常用于通信和数据交换的标准。这篇文档可能深入解析了ASN.1编码的不同方面,特别是BER,这是一种允许数据在不同系统...

    ASN.1 BER DER编码

    每一个ASN.1值都可以有多种BER编码方式,但在实践中,通常会使用DER(可辨别编码规则),它保证了对每一个ASN.1值只有一种编码方式。 ASN.1中的基本数据类型包括整数(INTEGER)、布尔值(BOOLEAN)、比特串(BIT ...

    ASN.1编码规则详解(最全最经典).pdf

    ### ASN.1编码规则详解 #### 1. ASN.1简介 ##### 1.1 ASN.1概述 ASN.1(Abstract Syntax Notation One)是一种国际标准,用于定义抽象数据类型的规格形式。它是由国际标准化组织(ISO)和国际电信联盟(ITU-T)...

    asn.1编辑器及C#源代码

    "学习asn.1及ber的好帮手"意味着这个编辑器不仅提供了基本的编辑功能,可能还内置了对BER编码的理解和可视化,有助于用户学习如何将ASN.1定义转换成实际的二进制数据。 在标签中,“asn.1”和“ber”是关键术语,...

    ASN.1抽象语法编码规则国家标准

    本国家标准包括下列文件: 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 BER DER编码子集入门指南.doc

    BER编码允许一定的灵活性,同一ASN.1值可能有多种不同的BER编码形式。然而,这可能导致编码的冗余,且不利于效率和解析。 Distinguished Encoding Rules(DER)是BER的一个严格子集,用于消除BER编码的歧义。DER...

    ASN.1 编码

    3. **编码规则**:ASN.1支持多种编码规则,如BER(Basic Encoding Rules)、DER(Distinguished Encoding Rules)、PER(Packed Encoding Rules)和XER(XML Encoding Rules)。其中,BER是最通用的,但效率较低;...

    ASN.1编码查看工具:Asn1View

    3. **多种编码规则支持**:Asn1View支持BER(Basic Encoding Rules)、DER(Distinguished Encoding Rules)和PER(Packed Encoding Rules)等不同的ASN.1编码规则,适应不同的应用场景。 4. **导出功能**:用户...

    基于Java实现的ASN.1 BER 和 DER 编码解码库.zip

    ASN.1(抽象语法标记一号)是一种在通信协议和数据表示中广泛使用的标准,它定义了一种数据结构化的方法,使得不同系统之间可以交换结构化的信息。BER(基本编码规则)和DER(差异化编码规则)是ASN.1的两种编码方式...

    ASN.1编码汇总

    ASN.1(抽象语法标记一号)是一种在通信协议和数据表示中广泛使用的标准化语言,它定义了一种数据结构和编码规则,使得不同系统之间能够交换结构化数据。ASN.1被用于众多领域,如电信、网络协议(如X.509证书、 ...

    asn.1编码规则

    **基本编码规则(BER)**是ASN.1数据结构转换为二进制格式的一套规则,使得ASN.1定义的数据能够通过各种物理传输信道进行有效传输。BER允许同一数据存在多种编码方式,而**DER**(Distinguished Encoding Rules)...

    ASN.1 BER DER编码子集入门指南.pdf

    ### ASN.1 BER DER 编码子集入门指南 #### 概述 本文旨在深入解析“ASN.1 BER DER 编码子集入门指南.pdf”所涵盖的核心知识点,特别是关于如何解析ASN.1 BER DER编码的基本概念和技术要点。这份资料不仅对于理解...

Global site tag (gtag.js) - Google Analytics