ASN.1 编码概述1(4)

2019-04-09 09:46

文档名称:ASN.1编码概述 15

rsadsi(113549) digestAlgorithm (2) md5 (5)\所以当解码程序看到这个OID时,就知道是MD5散列.

OID在公钥算法标准中很流行,它指出证书绑定了哪种散列算法. 同样,也有公钥算法,分组算法,和操作模式的OID. 它们是一种高效且可移植的表示数据包中所选算法的形式.

对OID的编码规则:

前两部分如果定义为x.y, 那么它们将合成一个字40*x + y, 其余部分单独作为一个字节进行编码.

每个字首先被分割为最少数量的没有头零数字的7位数字.这些数字以big-endian格式进行组织,并且一个接一个地组合成字节. 除了编码的最后一个字节外,其他所有字节的最高位(位8)都为1.

举例: 30331 = 1 * 128^2 + 108 * 128 + 123 分割成7位数字(0x80)后为{1,108,123}设置最高位后变成{129,236,123}.如果该字只有一个7位数字,那么最高为0.

MD5 OID的编码:

1. 将1.2.840.113549.2.5转换成字数组 {42, 840, 113549, 2, 5}.

2. 然后将每个字分割为带有最高位的7位数字,{{0x2A},{0x86,0x48},{0x86,0xF7,0x0D},{0x02},{0x05}}.

3. 最后完整的编码为 0x06 08 2A 86 48 86 F7 0D 02 05.

3.9 ASN.1序列和集合类型

序列(SEQUENCE)和单一序列(SEQUENCE OF)以及相应的集合(SET)和单一集合(SET OF)类型叫做\结构\类型或简单容器.它们是一种用来把相关数据元素收集为一个独立的可解码元素的简单方法.

文档名称:ASN.1编码概述 16

序列编码有以下性质:

1. 编码是结构化的.即头字节的位6必须设置.

2. 编码的内容是由ASN.1序列类型定义列表中的所有数据类型值的完全编码所组成,并且按照它们出现的顺序进行编码,除非这些类型被可选(OPTIONAL)或默认(DEFAULT)关键字所引用.

例:考虑如下序列

User ::== SEQUENCE{

ID INTEGER,

Active BOOLEAN

}

当取值为{32,TRUE}时,编码为 0x 30 06 02 01 20 01 01 FF} 在ASN.1文档里,使用空格来表示编码的属性.

0x30 06

02 01 20

01 01 FF

3.10 ASN.1可打印字符串和IA5String类型

可打印字符串(PrintableString)和IA5String类型定义了一种独立于本地代码页和字符集定义,在任何平台上都可以将ASCII字符串编码为可读字符串的可移植方法.

可打印字符串对象是ASCII集合的一个有限子集,这个子集包括32,39,40~41,43~58,61,63以及65~122.

文档名称:ASN.1编码概述 17

IA5String类型的编码对象是ASCII集合中的大多数.包括NULL,BEL,TAB,NL,LF,CR以及32~126.

可打印字符串和IA5String的编码和八位位组串相似.可打印字符串的头字节是0x13, IA5String的是0x16. 例如:\的编码为0x13 0B 48 65 6D 6D 6F 20 57 6F 72 6D 64.

3.11 ASN.1世界协调时类型

世界协调时(UTCTIME)定义了一种相对GMT时间的标准时间(以日期)编码.它使用\的格式分别表示年,月,日,时,分,秒. 其中\是遗留自初始的UTCTIME. 如果没有\就允许两种附加组\其中\和\分别为与GMT的时差和分差. 如果有\则时间是以Zulu或GMT时间表示.

字符串的编码按照IA5String编码规则进行转换(ASCII字符集),其头字节为0x17而不是0x16. 例如:

July 4,2003 at 11:33 and 28 seconds编码为\再编码0x17 0D 30 33 30 37 30 34 31 31 33 33 32 38 5A。


ASN.1 编码概述1(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:山东省东营市2016年中考物理试卷(解析版)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: