ASN.1 对象标识符值大于 128

ASN.1 object identifier values greater than 128

所以我理解了当值小于127时的编码方式。但是,在阅读https://docs.microsoft.com/en-us/windows/desktop/seccertenroll/about-object-identifier之后,我仍然不明白大于128的值是如何编码的。例如:

1.3.6.1.4.1.311.21.20 

编码为:

2b 06 01 04 01 82 37 15 14 

311 是如何编码成 82 37 的?当您将 8237 转换为十进制时,您会得到 33335。这部分我不是很了解。

This article 应该可以帮助您理解编码。

使用 7 位编码,第 8 位 (MSB) 用于指示编码结束。 82 37 是二进制 10000010 00110111。你可以看到它由两部分组成。第一部分将 MSB 设置为 1,但第二部分(在本例中也是最后一部分)将 MSB 设置为 0,表示编码结束。如果你解码它(忽略第一部分的 MSB)它将是 0000 0010 = 256 (2*128) + 0011 0111 = 55 (2^0 + 2^1 + 2^2 + 2^4 + 2^5) = 311