【问题标题】:ASN.1 object identifier values greater than 128ASN.1 对象标识符值大于 128
【发布时间】:2019-01-06 10:39:24
【问题描述】:

所以我了解当值小于 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。这部分我不是很明白。

【问题讨论】:

  • 311 是 0x137。所以最低有效字节是相同的。看起来您正在使用 Unicode 编码,字符定义是字符 1 到 127 的 ascii 代码。128 以上的 Unicode 字符完全不同。 unicode 字符的第一个字节是组指示符(如拉丁字符),第二个字符唯一地标识每个字符。
  • @jdweng:这是 ASN.1 对象标识符的 DER 编码,

标签: c# encoding binary cryptography asn.1


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2017-08-20
    • 1970-01-01
    相关资源
    最近更新 更多