对象标识符(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