ASN.1的作用:
传送语法:互联网上数据传输时的表现形式,通常以8位位组的流表示
中立:作为标准的计算机对象描述规则,平台无关,实现无关
抽象:以字节为基本单位,能够描述复杂的对象结构
ASN.1的类型:
简单类型:不能够再分解的类型。如整型(INTERGER),比特串(BIT STRING),字符串(OCTET STRING),对象标识符(OBJECT INDENTIFIER),日期型(UTCTime)等
结构类型: 包括顺序类型:按给定成员数据值组成
选择类型:由多个类型中的某一个组成
集合类型:由成员数据类型的一个或多个值组成
SEQUENCE:一个或多个类型的有序集合
SEQUENCE OF:0个或某个给定类型多次出现的有序集合
SET:一个或多个类型的无序集合
SET OF:0个或某个给定类型多次出现的无序集合
修饰词:
OPTIONAL:任选的,表示组件的值是可选的。
DEFAULT:缺少的,表示若未分配则指定默认值。
COMPONENTS OF:.....的组件
ASN.1的语法:
换行无特殊意义,多个空格或者多个空行代表一个空格
注释由一对连字符(--)开头
“ ”双引号代表字符本身
<>代表必选项
[]标签的开始和结束
{}清单的开始和结束
| 相当于或
::= 被定义为
() 子类型的开始和结束
类型定义:
<新类型的名字>::=<类型描述>
注意:新类型的名字需要大写字母开头,类型描述是内建类型或者在其它地方定义的类型
例子1:
Married::=BOOLEAN
例子2:
From::=SEQUENCE
{
name PrintableString,
age Age,
married Married,
marriage-certificate Picture OPTIONAL
}
例子3:
Payment-method::=CHOICE
{
check Check_number,
credit_card SEQUENCE
{
number Card_number,
expiry_date Date
}
}
值定义:
<新值的名字><该值的类型>::=<值描述>
注意:新值的名字由小写字母开头,值描述是基于整数或者字符串或者标识符等等的组合。且如果两个类型一样,可以相互赋值
例子1:
counter Lottery_number::=45
例子2:
pair Coordinaters::={x+5,y-3}
例子3:
date Date::="20000824"
例子4:
son_choice Afters::=dessert:"profiterolles"
模块定义:
<模块名字>DEFINITIONS<缺省Tag>::=
BEGIN
EXPORTS<名字>; --在本模块之外可以被访问到的类型或值
IMPORTS<名字>,valueFROM<其它模块的OID>; --在其它模块定义,在本模块会用到的类型或值
<模块具体描述>
END
例子1:
DEFINITIONS AUTOMATICTAGS ::=
BEGIN
EXPORTS Type2;
IMPORTS Type1, valueFROM Module1 {iso member-body(2)
f(250) type-org(1)ft(16) asn1-book(9) chapter5(0) module1(0)};
Type2 ::= SEQUENCE OFChoice
Choice ::= CHOICE
{
a INTEGER (0..value),
b Type1
}
END
完!