OID编码规则

本文详细介绍了对象标识符(OID)的编码规则及其在公钥算法标准中的应用。OID使用层次结构表示标准规范,并通过点分的十进制数定义标识符树。文章还提供了MD5 OID的具体编码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象标识符(OBJECT IDENTIFIER, OID) 的编码规则

对象标识符类型

       对象标识符(OBJECT IDENTIFIER, OID)类型用层次的形式来表示标准规范.标识符树通过一个点分的十进制符号来定义,这个符号以组织,子部分然后是标准的类型和各自的子标识符开始.

       例如:MD5OID 是 1.2.840.113549.2.5   表示为"iso(1) member-body (2) US (840) rsadsi(113549) digestAlgorithm (2) md5 (5)", 所以当解码程序看到这个OID,就知道是MD5散列.

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

       OID的编码规则:

前两部分如果定义为x.y, 那么它们将合成一个字40*x y, 其余部分单独作为一个字节进行编码.
每个字首先被分割为最少数量的没有头零数字的7位数字.这些数字以big-endian格式进行组织,并且一个接一个地组合成字节除了编码的最后一个字节外,其他所有字节的最高位(8)都为1.
     举例30331 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.

附:

       MD2:     (0x)30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 02 05 00 04
                   10 || H.
      MD5:     (0x)30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 05 05 00 04
                   10 || H.
      SHA-1:   (0x)30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 || H.
      SHA-256: (0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00
                   04 20 || H.
      SHA-384: (0x)30 41 30 0d 06 09 60 86 48 01 65 03 04 02 02 05 00
                   04 30 || H.
      SHA-512: (0x)30 51 30 0d 06 09 60 86 48 01 65 03 04 02 03 05 00
                      04 40 || H.

 

From:http://blog.sina.com.cn/s/blog_40e57cfb0100jduu.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值