繁体   English   中英

将ASN.1中OID的第一个标识符编码为BER

[英]Encoding of first identifier of an OID in ASN.1 into BER

OID似乎是一种表示树状结构的方法。

例如1.3.6.1是iso(1).org(3).did(6).internet(1)

最常用的编码方案似乎是BER,我对前两位数字的编码感到困惑。 为什么将前两位数字编码为一个字节,为什么这样:

int first_digit = first_byte / 40;
int second_byte = first_byte % 40;

是否假定前两个字节始终是小数字,因此可以很容易地“存储”在一个字节中? 如果是这样,我可以理解。

但是为什么要使用40的魔数呢? 为什么是40?

例如。 在1.3.xxx以上的情况下,第一个字节将被编码为43。

引用“ ASN.1 Complete”一书,作者为教授。 John Larmouth,第3.14节(可从http://www.oss.com/asn1/resources/books-whitepapers-pubs/larmouth-asn1-book.pdf免费获得该书):

编码前两个弧的八位组(在1986年)被认为不太可能具有较大的值,并且为这两个弧使用两个八位组是“一件坏事”。 因此,引入了“优化”(强制性)。

好了,这里有三个顶级弧,我们可以使用上述“更多位”概念在一个八位位组中容纳多达128个弧(0到127)的编码。 128除以3等于40! 假设前两个顶级弧永远不会超过40个子弧,然后将前40个伪弧分配给顶级弧0,然后将40个伪弧分配给顶级弧1,其余的分配给顶级弧。水平弧2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM