asn.1和基本编码规则..
- 格式:doc
- 大小:1.74 MB
- 文档页数:16
asn.1的ber编码ASN.1即抽象语法符号,用来定义应用程序数据和表示[wiki]协议[/wiki]数据单元的抽象语言。
优点是独立于机器、语言及应用程序的内部表示。
适用于描述现代通信中复杂的、变化的、可扩展的数据结构。
比如[wiki]3G[/wiki]和V o[wiki]IP[/wiki]均采用了ASN.1。
ASN.1分两大部分:语法规则和编码规则。
语法规则1. ASN.1定义示例Age ::= INTEGER (0..120)User ::= SEQUENCE {name IA5String (SIZE(1..128)),ageAge DEFAULT 18,address IA5String OPTIONAL,...}2. 简单类型基本类型字符串类型对象类型其它类型3. 构造类型SEQUENCE,对应于C语言中的structSEQUENCE OF,对应于数组SET,类似于SEQUENCE,但不考虑分量顺序SET OF,集合类型,每一分量类型相同,不考虑顺序4. 类型定义语法:typereference ::= Type示例:1) Counter ::= INTEGER2) UserAccount ::= SEQUENCE {usernamePrintableString,passwordPrintableString,account INTEGER}5. 赋值语法:valuereference Type ::= V alue示例:1) current Counter ::= 12342) myAccountUserAccount ::= {username “tly”,password “guesswhat”,account 2345}编码规则1. BER1) 三种情况及其格式:a.简单类型(Primitive),定长;Identifier | Length | Contentb.构造类型(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 1Class | P/C | Tag number分两种情况:a.Tag number < 31b.Tag number >= 313) Length及Content编码分三种情况:a.短形(L < 128),定长b.长形(L >= 128),定长c.不定长,仅用于构造类型4) 示例a.INTEGER 490000 0010 0000 0001 0011 0001erAccount ::= SEQUENCE {username IA5String,account INTEGER}myAccountUserAccount ::= {username “john”,account 129}0011 0000 0000 10100001 0110 0000 00110100 1010 0110 11110110 1000 0110 11100000 0010 0000 00100000 0000 1000 00012. DER为确保编码的唯一性,出现了CER和DER两种编码方案,它们均为BER子集。
ASN.1 BER编码Context字段规则1. 介绍ASN.1ASN.1(Abstract Syntax Notation One,抽象语法表示一)是一种用于定义数据结构和编码规则的标准。
它被广泛应用于电信领域中的通信协议中,如LDAP、X.509证书、SNMP等。
ASN.1定义了一种独立于语言的数据表示方式,使得不同的计算机系统可以相互理解和交换数据。
2. ASN.1 BER编码ASN.1 BER(Basic Encoding Rules,基本编码规则)是ASN.1中定义的一种编码规则,用于将数据结构转换为二进制编码形式以便在网络之间进行传输。
ASN.1 BER编码采用的是长度与值分开的方式来表示数据,具有自描述性和无需额外分隔符的特点,使得编码后的数据更为紧凑和高效。
3. Context字段规则在ASN.1 BER编码中,Context字段用于标识数据结构中的某个字段,以及与该字段相关联的数据内容。
Context字段由一个标签和一个值组成,用于在解析数据时识别字段的含义和位置。
4. Context字段的编码方式在ASN.1 BER编码中,Context字段的编码方式遵循特定的规则,包括以下几点:a. 标签编码:Context字段的标签由一个或多个字节组成,用于唯一标识数据结构中的某个字段。
标签的编码规则采用了可变长的方式,以保证对于不同范围的标签能够被正确编码。
b. 值编码:Context字段的值部分采用了对应数据类型的编码规则,如INTEGER、BOOLEAN、SEQUENCE等。
值部分的编码方式与普通字段的编码方式一致,但在解析时需要根据Context字段的标签来确定字段的含义。
c. 长度编码:Context字段的长度部分采用了可变长度编码方式,以使得不同范围的长度能够被正确编码。
5. Context字段的应用场景在实际应用中,Context字段常常被用于表示数据结构中的一些辅助性信息,如选项值、状态信息、错误码等。
ASN.1笔记——语法规则与类型概述⼀.简介ASN.1(Abstract Syntax Notation dotone),抽象语法标记1。
是定义抽象数据类型形式的标准,是⽤于描述数据表⽰、表⽰、传输、编码的记法。
ASN.1只包含信息结构,不处理具体业务数据,它不是⼀个编程语⾔。
ASN.1没有限定编码⽅法,各种ASN.1编码规则提供了由ASN.1描述其抽象句法的数据的值的传送语法(具体表达),常见的编码规则有:基本编码规则(BER),规范编码规则(CER,CanonicalEncoding Rules)、唯⼀编码规则(DER,DistinguishedEncoding Rules)、压缩编码规则(PER,PackedEncoding Rules)和XML编码规则(XER,XMLEncoding Rules)。
这些编码规则描述了如何将定义在ASN.1中的值译成适合传输的电码。
ASN.1在OSI的ISO8824/ITU X.208(说明语法)和ISO8825/ITU X.209(说明基本编码规则)规范。
⼏个概念:(1)实际语法指诸如C、ObjectiveCaml等这样实际编程语⾔;(2)抽象语法(AbstractSyntax)指ASN.1,是协议采⽤ASN.1规范描述的描述⽂本。
描绘了与任何表⽰数据的编码技术⽆关的通⽤数据结构。
抽象语法使得⼈们能够定义数据类型,并指明这些类型的值。
抽象语法只描述数据的结构形式,与具体的编码格式⽆关,同时也不涉及这些数据结构在计算机内如何存放。
(3)传输语法(TransferSyntax)指表⽰层交换数据的表⽰⽅法,是实际通讯系统间的码流。
当数据在两个表⽰层实体之间传输时,这些数据的实际⽐特模式表⽰⽅法就是传送语法。
(4)编码指将抽象语⾔法转换成实际通讯系统间⽐特流;(5)编码规则将抽象语⾔法转换成实际通讯系统间⽐特流所遵循的语法规则;⼆.相关背景知识1.为了顺利完成应⽤⾳的通讯,需使⽤以下概念:(1)抽象语法:定义了数据的常⽤结构(包括不同的数据类型),并且建⽴了和应⽤层对话所⽤的构架。
ASN.1(Abstract Syntax Notation One)是一套标准,用于描述数据的表示、编码、传输和解码的灵活记法。
它提供了一套正式、无歧义和精确的规则来描述独立于特定计算机硬件的对象结构。
虽然ASN.1本身只定义了表示信息的抽象语法,但没有限定其编码的方法。
ASN.1的标准编码规则包括以下几种:
1. 基本编码规则(BER,Basic Encoding Rules):这是最基本的编码规则,用于表示ASN.1数据类型和值的基本结构。
2. 规范编码规则(CER,Canonical Encoding Rules):这是另一种编码规则,与BER类似,但有一些额外的约束,以确保数据的唯一性和规范性。
3. 唯一编码规则(DER,Distinguished Encoding Rules):DER是CER的一个子集,它要求数据具有更严格的唯一性。
DER通常用于需要高度规范化和唯一性的场景,如数字签名和证书。
4. 压缩编码规则(PER,Packed Encoding Rules):PER是一种优化的编码规则,用于减少ASN.1数据的长度。
它通过使用更紧凑的表示方式来减少传输和存储所需的带宽和空间。
这些编码规则可以根据需要进行选择,以满足特定的应用
需求。