ASN.1 SEQUENCE标签号编码

12
根据例如http://luca.ntop.org/Teaching/Appunti/asn1.html,一个序列在十六进制中的标签号为10。 但是为什么它 DER 编码后是30而不是10呢?标签号为02的整数也被编码为02。 谢谢。
Sample ::= SEQUENCE {
    number 5
}

编码为30 03 02 01 05

1个回答

15

这是因为在 X.509 格式中,SETSEQUENCE 类型是以构造形式使用的。结果,第 6 位被设置为 1。将 SEQUENCE 通用标记(0x10)的第 6 位设置为 1,您将得到 0x30,将 SET(0x11)设置为 0x31,第 6 位设为 1=0x31。其余的通用类型则以原始形式编码(第 6 位设置为 0)。


我仍在努力。将第六位设置为0x14表示SEQUENCE,将其设置为0x15表示SET,这样对吗? - Jibby
第六位比特使原始形式构建。通过清除此位,您可以重新获得原始形式。 - Crypt32
我所问的是,00010100(用于SEQUENCE的0x10,并将第6位设置为表示构造),如何等于0x31而不是0x14? - Jibby
哦,抱歉,我在错误的方向上计算位数。这是第6位设置为00110000,就像你说的一样是0x30。糟糕! - Jibby
1
是的,比特是按照从右到左的方向计算的。 - Crypt32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接