asn.1和基本编码规则详解
ASN1简单介绍

ASN1简单介绍ASN.1 in ActionLJ 2006-06-27内容提要?ASN.1背景ASN.1基本概念和语法ASN.1编码介绍ASN.1示例ASN.1 = Abstract Syntax Notation One ?目标:传送语法互联网上数据传输时的表现形式,通常用8位位组的流表示?中立作为标准的计算机对象描述规则,平台无关,实现无关?抽象以字节为基础单位,能够描述各种复杂的对象结构SyntaxASN.1 --Abstract Syntax Notation OneRulesBER --ASN.1 Basic Encoding RulesDER --ASN.1 Distinguished Encoding RulesBER(ASN.1 Basic Encoding Rules)定义了一种或几种方法,使用ASN.1语法将数据对象转换成二进制字节码DER(ASN.1 Distinguished Encoding Rules)?BER的子集,定义了唯一一种方法,使用ASN.1语法将数据对象转换成二进制字节码BER DER特点标准性高效性扩展性比其他任何一种语言更为丰富的数据结构基本类型简单类型“原子”的,无分量结构类型有分量标记类型从其他类型衍生而来其他类型CHOICE, ANY赋值操作符::=::=用来对类型和值命名,并可用这些名字定义其他类型和值基本描述语法DigestInfo ::= SEQUENCE {digestAlgorithm DigestAlgorithm,digest Digest }DigestAlgorithm ::= AlgorithmIdentifierDigest ::= OCTET STRINGAlgorithmIdentifier ::= SEQUENCE {algorithm OBJECT IDENTIFIER,parameters ANY DEFINED BY algorithm OPTIONAL } ASN.1中绝大部分类型(除CHOICE和ANY)都有一个标记符标记符= 标记符类型+ 标记符ID标记符类型Universal标准类型Application应用相关(同种ID在不同应用中可能意义不同) Private定义属于特定组织的类型Context-Specify上下文相关的类型,定义特定的结构常用标准ASN.1标记符示例:Integer0x02Bit String0x03OCTET String0x04Null0x05Object Identifier0x06UTF8 String0x12Printable String0x13UTC Time0x17Sequence0x30Set0x31长度表示(DER编码标准)长度小于127(包含),1字节编码:38表示为[0010 0110]长度大于127,多字节编码,第一字节为长度字节数,并且bit8为1:201表示为[1000 0001] [1100 1001]TLV ?TLV Schema = Tag, Length and Value SchemaILC ?ILC Schema = Identifier, Length and Conents Schema Tag Length Value示例06 07 2A 86 4A 86 F7 0D 0106072A 86 4A 86 F7 0D 0130 82 02 51 30 82 01 BA A0 03 02 01...3082 02 5130 82 01 BA A0 03 02 01...OID = Object Identifier表示一个诸如算法,属性类型或注册机构对象定义的一个整数序列OID的值由注册机构来赋予,每个注册机构负责定义一个特定的序列开头的所属序列pkcs-1 OBJECT IDENTIFIER ::={iso(1) member-body(2) US(840) rsadsi(113549) pkcs(1)1}OID含义1.2ISO成员体1.2.840美国1.2.840.113549RSA数据安全公司1.2.840.113549.1RSA数据安全公司,PKCSBouncy Castleorg.bouncycastle.asn1.*PKIToolv2.0/doc/4e12512733.html,.jit.ida.util.pki.a sn1.*Integer编码示例SignedData :: = SEQUENCE {version Version... }Version ::= Integer提示... 02 01 02 ...DERIntegerDERInteger version = new DERInteger(new BigInteger(2));OID编码示例pkcs-1 OBJECT IDENTIFIER ::= {iso(1) member-body(2) US(840) rsadsi(113549) pkcs(1) 1 } rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 }SHA1WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 5 }?提示1.2.840.113549.1.1.5提示... 06 09 2A 86 48 86 F7 0D 01 01 05 ...DERObjectIdentifierDERObjectIdentifier sha1_rsa =new DERObjectIdentifier(“1.2.840.113549.1.1.5”);PrintableString编码示例Country Name ::= PRINTABLE STRING提示...13 02 43 4E ...DERPrintableStringDERPrintableString cn = new DERPrintableString(“CN”);Sequence编码示例SEQUENCE一个或多个给定类型的有序集合?SEQUENCE OF0个或多个给定类型的有序集合RSAPublicKey ::= SEQUENCE { modulus INTEGER, --npublicExponent INTEGER --e }DERSequenceDERInteger modulus = ... ;DERInteger publicExponent = ... ;DEREncodableVector derVector = new DEREncodableVector();derVector.add(modulus);derVector.add(publicExponent);DERSequence sequence = new DERSequence(derVector);。
asn1的ber编码

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字段规则

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编码规则详解最

国际标准组织(ISO – International Organization for Standardization)于 1946 年 在美国成立,其负责制定众多领域的国际标准;但除电气、电子和电子工艺领域外,这些主要是 IEC(International Electrotechnical Commission)负责。
些组织可以参加讨论,提出议案,但不能参加投票。
Figure 1-5 ISO 组织结构 如 Figure 1-5 所示,ISO 共分为 172 个技术委员会 Technical Committee (TC)负责相应 标准化领域。 所有议题都在子委员会 SubCommittees 中共享,Subcommittee 又分为工作组 Working Groups(WG)。 到 1987 年,著名的 OSI 标准就是 TC97 的成果,称之为“Telecommunications and Information Exchange Between Systems”。在 1987 年,ISO 和 IEC 两个标准化组织一致认为都应当关注信 息技术 Information Technology,因此成立了一个联合技术委员会称为 JTC1。JTC1 的秘书处由 ANSI 负责。
UNIVERSAL 8 外部类型和类型实例 UNIVERSAL 9 实数类型 UNIVERSAL 10 枚举类型 UNIVERSAL 11 嵌入的 pdv 类型 UNIVERSAL 12 UTF8 字符串类型 UNIVERSAL 13 相关对象标识符 类型 UNIVERSAL 14-15 保留给本建议的以后版本和国际标准使用 UNIVERSAL 16 序列和类型序列 UNIVERSAL 17 集合和类型的集合 UNIVERSAL 18-22, 25-30 字符串 类型 UNIVERSAL 23-24 时间 类型 UNIVERSAL 31-... 保留给本建议以外的类型和国际标准使用 ASN.1 还能够定义如下的数据结构类型: 结构 ( SEQUENCE ), 列表 ( SEQUENCE OF ), 类型选择 ( CHOICE ), 等等
ASN.1笔记——语法规则与类型概述

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 编码规则

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数据的长度。
它通过使用更紧凑的表示方式来减少传输和存储所需的带宽和空间。
这些编码规则可以根据需要进行选择,以满足特定的应用
需求。
ASN.1编码规则详解

ITU 有 5 个常设组织,其中一个为 CCITT(Consultative Committee on International Telephony and Telegraphy)负责电信网络,如有线传输语音,数据和电视。在 1992 年 ITU 重 组后,CCITT 成为了 ITU-T(ITU-Telecommunication Standardization Sector)。
1989 年 CCITT 发布了两个文档 X.208(ASN.1)和 X.209(BER)来替代 X.409 建议。其中 很多新特性是由 JTC 1 引入的:subtypes, floats (REAL type), pointers (ANY DEFINED BY type) and the default tagging modes (IMPLICIT TAGS and EXPLICIT TAGS)。他们这套 X.200 系列 称为“General OSI Infrastructure”,表示 ASN.1 成为应用层一种独立的描述语言。
asn.1

| most significant byte | octet 1
+-------------------------------|
. .
+-------------------------------|
| least significant byte | octet n
位8位7代表数据的类型标记(Universal-00, Application-01, Context-Specific-10, Private-11);
位6代表该数据单元是否原子式的(Primitive-0, Construct-1);
位5到位1代表类号(Number of tag)。
如下图所示:
1.2 话单基本编码规则说明
1.2.1 ASN.1(BER)编码规则
ASN.1 是 ‘Abstract Syntax Notation One’的缩写。
ASN.1可以被看作一种高层协议描述语言,由于它可以用来清晰的描述复杂的数据结构,因而被广泛的作为应用层协议语法的标准。
ASN.1给协议设计者提供了一些简单类型,如整型(Integer)、布尔型(Boolean)以及字节串(Octet string)等,以这些简单类型为基础,协议的设计者就可以构造出更复杂的数据类型。
+-------------------------------+
...
+-------------------------------|
n+1| L L L L L L L L |
内容 (contents octets);
ASN.1详解

(3) 取值范围(值区间) 只适用于整数和实数类型, e.g. NoID::=INTEGER(1..100) PositiveInteger ::=INTEGER(0<..MAX) PositiveInteger ::=INTEGER(1..MAX) (4) 可用字符 只用于字符串类型,限制字符集的取值范围。 DigitString ::=IA5String(FROM(0)|(1)|(2)|(3)|(4)|(5)| (6)|(7)|(8)|(9)) str2 DigitString ::= “46732”
② BOOLEAN 布尔值。取值为TRUE或FALSE。 e.g. Employed::=BOOLEAN Married::=BOOLEAN lincoln Married ::= TRUE ,lincoln Married ::= FALSE ③ ENUMERATED e.g. Month::= ENUMERATED { January (1), February (2), March (3),
⑤ BIT STRING 位串类型,由零个或多个比特组成的有序位串。可用二进制和 十六进制表示。如: 10010001B,91H e.g. Occupation::=BIT STRING{ clerk (0), editor (1), artist (2), publisher (3) } peter Occupation::={editor,artist} --or "0110B"
4.2 ASN.1的基本概念
4.2.1 文字约定
ASN.1区分大小写。 跳空格,与布局无关。 注释以--开头,以--或行尾结束。 标识符由大、小写字母,数字和横线组成,如sysName 内部类型标识符全部大写,如BOOLEAN,INTEGER。 用户定义的类型名和模块名以大写字母开头,School 。
asn.1基本语法和编码规则

序号主题内容1 引言ASN.1(Abstract Syntax Notation One)是一种用于描述数据结构和编码规则的标准化语言,广泛应用于网络通信、安全认证、电子商务等领域。
本文将介绍ASN.1的基本语法和编码规则,帮助读者更好地理解和应用ASN.1。
2 ASN.1基本语法ASN.1定义了一种抽象语法用于描述数据结构,包括类型定义和值约束。
ASN.1的基本语法包括以下几个关键点:2.1 类型定义ASN.1通过类型定义来描述数据结构,包括基本类型(如整数、字符串等)、复合类型(如结构体、序列等)和引用类型(如引用其他类型)。
每种类型都有自己的标识符和约束条件。
2.2 值约束ASN.1可以通过值约束来限定数据的取值范围,如最小值、最大值、长度等。
这些约束条件可以在类型定义中进行声明,确保数据的合法性和完整性。
2.3 模块化ASN.1支持模块化的数据描述,可以将相关的类型定义和数值约束组织在一个模块中,便于管理和复用。
3 ASN.1编码规则ASN.1定义了一种通用的编码规则将数据结构转换为二进制格式进行传输,包括基本编码规则(BER)、压缩编码规则(CER)、XML编码规则(XER)等。
下面将介绍常用的BER编码规则:3.1 BER编码规则BER是ASN.1最基本的编码规则,它采用TLV (Type Length Value)的格式对数据进行编码,包括标签、长度和数值三个部分。
标签用来标识数据的类型,长度用来表示数值的长度,数值则是具体的数据内容。
3.2 编码过程在进行BER编码时,首先需要根据数据结构的类型定义和值约束来确定每个数据元素的标签和长度,然后将数值部分按照约定的规则进行编码,最后将标签、长度和数值按照TLV格式进行组合得到最终的二进制数据。
3.3 应用实例BER编码规则广泛应用于网络协议中,如SNMP、LDAP等,可以有效地将复杂的数据结构进行编码和解码,实现数据的可靠传输和解析。
asn.1话单文件的结构和编码

1.1话单文件的构成1.1.1字段(Field )基本的数据单元,构成话单记录的基本元素。
每个字段有自己的标记(Tag ),长度(Len )。
字段可分为的定长字段和不定长字段。
1.1.2 话单(Charging Data Record )记录与一个计费事件有关的计费信息。
每个话单包含多个字段。
每个话单长度最大不超过2048字节。
1.1.3 块(Block )每个块包含一个或多个不定长(L )的话单,块的长度为定长(2048字节),话单填充在块中直到没有更多空间可以加入下一个话单,块的剩余空间以填充符(H ’FF )填充。
图1 块的结构图式填充符的含义在于,保证一个话单编码出现异常后,只影响包含该话单的block 的数据,同时由于每个block 是定长的,解码程序可以直接从下一个block 起始位置直接解码。
这是业界通用的方法,爱立信,西门子等都采用该方式。
1.1.4 话单文件(File )话单文件由一个或者多个 “Block ”组成。
根据系统的设置,GSN/CGF 定时或定长产生一个话单文件。
图2 话单文件的结构图式1.2 话单编码1.2.1 ASN.1(BER)描述GSN/CGF产生的话单规定使用抽象语法标记一(ASN.1),ASN.1是一种定义数据在不同通讯系统之间发送方式的语言,ASN.1通过提供一个应用层协议指定的公共语法来确保接收的数据与传送的数据一样。
ASN.1是一个基于OSI模型的ISO/ITU-T标准,定义在“ASN.1 encoding rules: Specification of Basic Notation,ITU-T Recommendation X.680”。
GSN/CGF使用ASN.1基本编码规则(BER)来编码话单,BER是一个标准规则的集合,在“ASN.1 encoding rules: Specification of Basic Encoding Rules (BER),Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER) ITU-TRecommendation X.690”中定义,编码ASN.1指定的数据类型。
ASN.1-PER编码规范

同理,PrintableString 中包含的字符为:“a..z”、“A..Z”、 “0..9”、“space”、“,”、“(”、 “)”,“+”、“、”、“-”、“/”、“.”、“=”、“?”、“:”共 74 个字符,每个字母应编码为 7 比 特。NameString 共 52 个大小写字母,每个字母编码则为 6bit。
为第 3 项编码值为 2,选择项编码为:10。然后再对 small 项编码,因为取值为 16,索引值 为 14,整数范围是 2~17 共 16 个数,要编 4 比特,因此要对索引值 14 编 4 比特,即编码 为:1110。
3.9 SEQUENCE
一般说来,序列编码后都会产生一个前导位图,用以指示序列中的可选项或缺省项是否
{
zero
NULL,
one
NULL,
small
INTEGER (2..17),
large
INTEGER (18..512)
} NumberOfTransportBlocks 是一个选择类型,若信息传输块的个数为 16,则应该选择
CHOICE 的 small 项,然后在对该项值进行编码。首先 CHOICE 里有 4 项,编码为 2bit,small
ASN.1 作为一种数据表示标准产生于 20 世纪 80 年代早期的开放系统互联(OSI)网络模 型,虽然 OSI 模型并没有得到广泛的应用,但是 ASN.1 标准在继续进化。今天已有大量的 实际应用,这些应用包括:3G 移动系统、IP 语音、安全应用、传统电信网络、军事和空间 应用等许多方面。
asn.1和基本编码规则详解

UserAccount ::= SEQUENCE {
username VisibleString,
password VisibleString,
accountNr INTEGER
}
结构赋值:
SequenceValue ::=
{ElementValueList} |
{ }
ElementValueList ::=
IP语音:
在通信领域中的另一个重要应用是通过包转换网络(如因特网)传递语音数据。多媒体数据信号编解码器(CODEC)标准(H.323等等)基于ASN.1并且使用于分组编码标准来获取理想的数据传输速率。
安全应用:
因特网安全授权同样也使用了ASN.1。高级编码标准在数据表示方面形成了 一个方便的、平台无关的标准,比加密要优越。PKIX、PKCS和X.509也是我们所熟悉的标准,它们也是基于ASN.1的。
关键词:ASN.1 基本编码规则 MAP消息LocationRequest
ASN.1作为一种数据表示标准产生于20世纪80年代早期的开放系统互联Internet网络模型,但OSI模型并没有得到广泛的应用,而ASN.1标准继续使之发展,今天在实际中已有大量应用,这些应用包括:
3G移动系统:
使用ASN.1标准 数据交换的第三代移动通信网络。这一系统基于UMTS(通用移动通信系统)标准,其使用了ASN.1和分组编码标准(PER)。
枚举类型。枚举类型实际上是一组个数有限的整型值。可一个每个整型值赋以不同的意义。
5.BIT STRING
位串类型,由零个或多个比特组成的有序位串。位串的值可以由对应的二进制或者十六进制串表示。其中左边的位由较高的权重。
6.OCTET STRING
asn.1和基本编码规则

ASN.1和基本编码规则作者:亢朝峰业务四室摘要:该文说明了ASN.1和基本编码规则(BER)的原理和应用。
文中,首先描述了ASN.1,并给出了几种常见类型的相应的例子,来说明ASN.1的应用;接着对基本编码规则(BER),通过对MAP中的LocationRequest的请求操作消息的参数进行编码的具体实现,来说明基本编码规则的工作原理。
总之,ASN.1和基本编码规则实际中有非常广泛的应用。
关键词:ASN.1 基本编码规则MAP消息LocationRequestASN.1作为一种数据表示标准产生于20世纪80年代早期的开放系统互联Internet 网络模型,但OSI模型并没有得到广泛的应用,而ASN.1标准继续使之发展,今天在实际中已有大量应用,这些应用包括:3G移动系统:使用ASN.1标准数据交换的第三代移动通信网络。
这一系统基于UMTS(通用移动通信系统)标准,其使用了ASN.1和分组编码标准(PER)。
IP语音:在通信领域中的另一个重要应用是通过包转换网络(如因特网)传递语音数据。
多媒体数据信号编解码器(CODEC)标准(H.323等等)基于ASN.1并且使用于分组编码标准来获取理想的数据传输速率。
安全应用:因特网安全授权同样也使用了ASN.1。
高级编码标准在数据表示方面形成了一个方便的、平台无关的标准,比加密要优越。
PKIX、PKCS和X.509也是我们所熟悉的标准,它们也是基于ASN.1的。
传统通信网络:ASN.1和基本编码规则(BER)已经在主要通信领域流行了很长一段时间,所有的ss7到ISDN的一切都使用了ASN.1 BER信息在各种类型的设备和计算机之间传递信号。
军事和空间应用:美国国家宇航局(NASA)在其航空通信网规范中,也正在使用ASN.1和分组编码规则作为空对地或地对空协议。
一、概述众所周知,抽象是解决软件开发问题的有效手段。
利用抽象,设计人员可以定义系统的一个部分而不用关注这个部门实际上是如何实现或者表达的。
ASN1编码规则详解

ASN1编码规则详解1简介注释:1.1ASN.1简介ASN.1(AbtractSynta某Notationdotone),抽象记法1。
数字1被ISO加在ASN的后边,是为了保持ASN的开放性,可以让以后功能更加强大的ASN被命名为ASN.2等,但至今也没有出现。
ASN.1本身只定义了表示信息的抽象句法,但是没有限定其编码的方法。
各种ASN.1编码规则提供了由ASN.1描述其抽象句法的数据的值的传送语法(具体表达)。
标准的ASN.1编码规则有基本编码规则(BER,BaicEncodingRule)、规范编码规则(CER,CanonicalEncodingRule)、唯一编码规则(DER,DitinguihedEncodingRule)、压缩编码规则(PER,PackedEncodingRule)和某ML编码规则(某ER,某MLEncodingRule)。
ASN.1成功的一个主要理由是它采用了一些如BER(BaicEncodingRule)或新制定的PER(PackedEncodingRule)这样的标准化的编码规则,它对受带宽限制的应用程序很有用。
这些编码规则描述了如何将定义在ASN.1中的值译成适合传输的电码(例如:他们可以被转化为可传输的字节,或反向转化),其与机器、编程语言或者在应用程序中的表示无关。
ASN.1的编码方式比很多竞争者更先进,能够快速并可靠的传输可扩展信息--这是无线带宽的一个优势。
由于从1982年以后ASN.1已经成为一个国际标准,所以它的编码规则是成熟的并且它有长期的可靠性和互用性的跟踪记录。
一个的ASN.1源文件可以非常容易地(由预处理器)映射为C或C++或Java数据结构,可用于通过应用程序代码,和支持的运行时库提供的编码和解码的申述或者一个某ML或限值的格式,或非常紧凑的压缩编码格式。
几乎所有操作系统上的工具都支持ASN.1,ASN.1支持如java,c和c++这样流行的编程语言,和包括COBOL这样的较老的编程语言。
ASN.1标准编码规则BER

ASN.1标准编码规则BER一.基本规则BER(Basic Encoding Rules)是ASN.1中最早定义的编码规则,其他编码规则是在BER的基础上添加新的规则构成。
1.BER传输语法的格式一直是TLV三元组<Type,Length, Value>.T是Tag,L是整个类型的长度,V是类型的Value,它还可以是TLV或TLV组合2.BER传输语法是基于八位组大端编码的,高八位在左。
3.Tag是一个或若干个八位组(1).Universal Tag类型(值是0-30):第七、六位指明Tag的类型,Universal Tag类型用00表示;第五位指明该类型以primitive方式编码还是constructed方式编码。
Tag value值是基本类型的Tag的值,例如INTEGER的Tag值是2,SEQUENCE型类Tag值是16:ASN.1中定义的UNIVERSAL类TagTag类型0BER保留1BOOLEAN2INTEGER3BIT STRING4OCTET STRING(2).当Tag大于30时,多个八位组中编码,第一个八位组后五位全部为1,其余的八位组最高位为1表示后续还有,为0表示Tag结束。
第一个八位组高二位的取值:00表示Universal,01表示APPLICATION类型,10表示context-specific,11表示PRIVATE类型2.BER编码中Length表示Value部分所占八位组的个数,有两大类:定长方式(Definite Form)和不定长方式(Indefinite Form)(1).定长方式定长方式中,按长度是否超过一个八位,又分为短、长两种形式:短:类型长度大于等于0个八位,小于等于127长:类型长度大于等于127个八位,小于等于256^126-1第一个八位组的低七位指明整个L所占用的八位组个数,后续八位组表示V的长度(2).不定长方式Length所在八位组固定编码为0x80,但在Value编码结束后以两个0x00结尾。
ASN.1基本语法和编码规则

ASN.1基本语法和编码规则1 ASN.1 简介ASN.1 (Abstract Syntax Notation One),抽象语法标记,是描述抽象类型和值的标记,缩写为ASN.1。
它用于对通过接口和通信媒体进行传输的信息的抽象描述,广泛应用于各种通信协议的说明中。
ASN.1是一个很灵活的标记法,它允许定义众多的数据类型——从整数和位串等简单类型到如集合、序列等的组合结构,还可以是其它复杂定义的类型。
一个ASN.1定义可以选用不同的编码规则,但解码器必须采用和编码器相同的编码规则。
目前标准化的编码规则有4个:BER、DER、CER、PER。
BER在19世纪80年代初形成,广泛应用于各种通信协议中,比如SNMP、MHS、TSAPI 等;DER是BER的一种特殊形式,用于对安全性敏感的应用,比如电子商务,要求对一条消息的编码和解码有且只有一条途径;CER是BER 的另一种特殊形式,类似于DER,但它适用于长消息,可以在知道整条消息之前就开始编码,实际中CER很少应用,这是因为工业界把DER作为安全编码的优先方法;PER在上述编码规则之后出现,因它的高效算法而闻名,它的编码速度和压缩程度比BER高,PER适用于带宽资源缺乏的应用,比如空中交通控制和音频—视频通信等。
2 BER的编码规则和传输语法2.1基本规则BER(Basic Encoding Rules)是ASN.1中最早定义的编码规则。
每种BER 编码方法都由三或四部分组成:(1)Tag octets:定义了ASN.1值的类和标签值,并指明编码方法是简单化的还是结构化的。
(2)Length octets:对于定长编码方法,它指出了内容octet的个数;对于结构化、非定长编码方法,它指明了长度是不确定的。
(3)V alue octets:对于简单的、定长编码方法,它给出了值的具体表示;对于结构化的方法,它给出了值的内容的BER编码的串联。
(4)End-of-values octets:对于结构化、非定长的编码方法,它表示内容结束;对于其它方法,没有该部分。
ASN.1编码规则详解(全部精彩)

对于给定的记法描述,ASN.1 编译器能执行并产生如 Figure 1-2 图中虚线部分,这样我 们以有限的代价就能完成相当多数量系统之间的互连。
Figure 1-2 语Βιβλιοθήκη 三元组:实际语法、抽象语法和传输语法
(1)实际语法(Concrete Syntax) 指诸如 C、Objective Caml 等这样实际编程语言;
ASN.1 发送任何形式(音频、视频、数据等等)的信息都必须用数字传送。ASN.1 只能 包含信息的结构方面(没有已经定义的或考虑到的处理数据值的操作)。它不是一个编程语 言。
ASN.1 本身只定义了表示信息的抽象句法,但是没有限定其编码的方法。各种 ASN.1 编码规则提供了由 ASN.1 描述其抽象句法的数据的值的传送语法(具体表达)。标准的 ASN.1 编码规则有基本编码规则(BER,Basic Encoding Rules)、规范编码规则(CER,Canonical Encoding Rules)、唯一编码规则(DER,Distinguished Encoding Rules)、压缩编码规则(PER, Packed Encoding Rules)和 XML 编码规则(XER,XML Encoding Rules)。 ASN.1 成功的一个主要理由是它采用了一些如 BER(Basic Encoding Rules)或新制定的 PER(Packed Encoding Rules)这样的标准化的编码规则,它对受带宽限制的应用程序很有用。 这些编码规则描述了如何将定义在 ASN.1 中的值译成适合传输的电码(例如:他们可以被转
指表示层交换数据的表示方法,是实际通讯系统间的码流。当数据在两个表示层实体之间传 输时,这些数据的实际比特模式表示方法就是传送语法。 (4)编码
信息技术 asn.1 编码规则 第2部分

信息技术 asn.1 编码规则第2部分《深入理解信息技术中的ASN.1编码规则》一、引言信息技术中的编码规则是保证数据在传输和存储过程中能够被准确解释和处理的重要环节。
其中,ASN.1编码规则作为一种通用的数据表示和交换标准,在各种领域都有着广泛的应用。
在上一篇文章中,我们已经对ASN.1编码规则的基本概念进行了介绍,本篇文章将继续深入探讨ASN.1编码规则的具体实现和应用。
二、ASN.1编码规则的基本原理在讨论ASN.1编码规则的具体实现之前,我们需要先了解ASN.1编码规则的基本原理。
ASN.1编码规则是一种将数据进行结构化表示和压缩传输的方法,它通过定义数据的类型、值域和编码规则,使得数据既能够被高效地传输和存储,又能够被准确解释和处理。
在ASN.1编码规则中,数据被表示为一系列的标签-长度-值(TLV)组成的结构,其中标签用于唯一标识数据的类型,长度用于表示数据的长度,值用于存储数据的实际数值。
三、ASN.1编码规则的具体实现1. BER编码规则在ASN.1编码规则中,最常用的编码规则之一就是基本编码规则(BER)。
BER编码规则是ASN.1编码规则的最基本形式,它通过将数据按照TLV结构进行编码,并使用可变长度的方式表示数据的标签和长度,从而实现了对各种数据类型的灵活处理。
在实际应用中,BER 编码规则通常被用于对数据进行压缩传输和网络通信,它具有较高的效率和灵活性,能够满足各种复杂数据结构的编码和解码需求。
2. DER编码规则除了基本编码规则(BER)之外,另一个常用的ASN.1编码规则是分布式编码规则(DER)。
与BER相比,DER编码规则在对数据进行编码时进行了严格的限制,包括禁止使用可变长度表示标签和长度、对数据进行唯一标识和排序等。
这些限制使得DER编码规则在对数据进行数字签名和加密等安全操作时具有更高的安全性和可靠性,因此在安全领域得到了广泛的应用。
3. CER编码规则还有一种基本编码规则(CER)也在一些特定领域得到了广泛的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作者:亢朝峰 业务四室
摘 要:该文说明了ASN.1和基本编码规则(BER)的原理和应用。文中,首先描述了 ASN.1,并给出了几种常见类型的相应的例子,来说明ASN.1的应用;接着对基本编码规则(BER), 通过对MAP中的LocationRequest的请求操作消息的参数进行编码的具体实现,来说明基本编码规则的工作原理。总之,ASN.1和基本编码规则实际中有非常广泛的应用。
IP语音:
在通信领域中的另一个重要应用是通过包转换网络(如因特网)传递语音数据。多媒体数据信号编解码器(CODEC)标准(H.323等等)基于ASN.1并且使用于分组编码标准来获取理想的数据传输速率。
安全应用:
因特网安全授权同样也使用了ASN.1。高级编码标准在数据表示方面形成了 一个方便的、平台无关的标准,比加密要优越。PKIX、PKCS和X.509也是我们所熟悉的标准,它们也是基于ASN.1的。
关键词:ASN.1 基本编码规则 MAP消息LocationRequest
ASN.1作为一种数据表示标准产生于20世纪80年代早期的开放系统互联Internet网络模型,但OSI模型并没有得到广泛的应用,而ASN.1标准继续使之发展,今天在实际中已有大量应用,这些应用包括:
3G移动系统:
使用ASN.1标准 数据交换的第三代移动通信网络。这一系统基于UMTS(通用移动通信系统)标准,其使用了ASN.1和分组编码标准(PER)。
EXPORTS结构用于定义其他模块可以移植的类型或值。
类型定义和值定义是通过类型分配(type assignment)和值分配(value assignment)来完成的。类型分配和值分配包含于模块的AssignmentList中。类型分配和值分配的格式如下:
类型定义
语法:<type name> := type
一、概述
众所周知,抽象是解决软件开发问题的有效手段。利用抽象,设计人员可以定义系统的一个部分而不用关注这个部门实际上是如何实现或者表达的。这一方法使得实现open,它简化了定义过程,使得在实现部件之前可以声明某些“公理”、并且在设计高层部件时假定下层部件是可以实现的。抽象是现代多数软件规范的特点。
作为当今最复杂的系统之一,开放系统互联(OSI)是一个包含了大量抽象的例子。OSI是一个国际通用的标准体系,从物理层一直到用户层,规划了计算机之间的互联。高层次的对象被抽象定义,并将由底层的对象来实现。比如,某层的一个服务可能需要在计算机之间传递某个抽象对象;某一底层则可能提供关于0、1字符串的实现,利用一些编码规则把高层的抽象对象转换成这些字符串。
ASN.1可以定义各种各样的简单类型数据,也可以定义十分复杂的数据结构类型。
2.1 ASN.1的模块
ASN.1的基本单位是模块(module)。ASN.1模块实际上是由一组类型定义和值定义组成的。类型定义就是说明类型的名称和类型的格式,值定义则是规定将什么样的具体值赋给某一类型的变量。
ASN.1模块的一般格式如下:
OSI的说明抽象对象的方法叫做抽象语法标记(ASN.1,在X.208中定义),而用0、1字符来表示这样的对象的规则集合叫做基本编码规则(BER)。ASN.1是一个很灵活的标记法,它允许定义众多的数据类型——从整数和位串等简单类型到如集合、序列等的结构,还可以是其它复杂定义的类型。BER描述了如何将ASN.1类型表示和编码成八位字节串。通常不止一种编码给定数据的方法,另一种叫做DER(Distinguished Encoding Rules)的编码集合,它是BER的子集,其特点是给每一个ASN.1值一个唯一的编码。
一个ASN.1的值可以用不同的方法表示:打印值是用打印的形式表示的ASN.1的值,对人而言,它是一种严格的表示法,因为它不必依赖任何机器的体系结构;本地值是由程序设计语言或系统用来表示ASN.1的值;传送值表示传送中的ASN.1的值,它是ASN.1值的比特流形式,是根据一组称之为传送文法(Transfer Syntax)的规则而得到的。ASN.1值的表示法决定了它的开发性和互操作性,并成为一种通用的信息交换的表示法。
图1.1 说明了抽象语法、编码规则之间的关系。从图中可以看出,抽象语法利用一些正式的规则来描述各种用户数据;而编码规则采用适当的方法将用抽象语法描述的用户对象定义为适合物理传输信道传输的格式。
图1.1 抽象语法、编码规则之间的关系
二、抽象语法标记(
ASN.1(Abstract Syntax Notation One)是一种用于描述结构化客体结构和内容的语言。它定义在ISO 8824或ITU-T X.208中பைடு நூலகம்ASN.1类似于高级程序设计语言的数据描述部分。它提供若干语言构件用以定义类型和值,类型对应结构,值对应内容。但和其他程序设计语言不同的是,ASN.1的类型不需要机器实现。
类型的赋值:
<value name> <type> ::= <value>
2.2 简单类型
1.INTEGER
整数类型。与一般程序设计语言不同的是,ASN.1中没有限制整型的位数。也就是说,INTEGER可以是任意大小的整数。
定义一个整型类型Counter
Couter := INTEGER
IpAddress :=Octetstring
ModuleDefinition ::=
ModuleIdentifier
DEFINITIONS
TagDefault
“::=”
BEGIN
EXPORTS
IMPORTS
AssignmentList
END
其中,
ModuleIdentifier是模块标识符,也就是模块的名称( 模块名的第一个字母必须大写);
IMPORTS结构规定了模块中某些定义是从其他模块中移植过来的;
传统通信网络:
ASN.1和基本编码规则(BER)已经在主要通信领域流行了很长一段时间,所有的ss7到ISDN的一切都使用了ASN.1 BER信息在各种类型的设备和计算机之间传递信号。
军事和空间应用:
美国国家宇航局(NASA)在其航空通信网规范中,也正在使用ASN.1和分组编码规则作为空对地或地对空协议。