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

  • Post author:
  • Post category:其他




对象标识符

(OBJECT

IDENTIFIER,


OID

)



的编码规则


对象标识符类型








对象标识符

(OBJECT

IDENTIFIER,


OID

)


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








例如:

MD5






OID











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

=

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.

附:

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.