我试图解码一个名为 Subject Key Identifier (RFC 5820) 的字段,该字段包含在 CMS 证书 (RFC 6488) 中。我之前的大部分“工作”都成功地使用了 pyasn1 和 pyasn1_modules 来解码 ASN1 结构。但是我得到了错误:
pyasn1.error.SubstrateUnderrunError: 31<18 at <TagSet object, tags 128:32:15>
使用调试器我发现在阅读时出现了问题:
AF 9F 00 96 C2 39 12 D7 8F 6A D6 D6 35 9B A4 88 FB 3A 32 A0
查看第一个八位字节(AF -> 10101111),我的理解是这是构造定长方法,标识符为 15。
由于第一个八位组已经完成,第二个是长度。9F -> 10011111,由于设置了 MSB,长度将由接下来的 31 个八位字节设置。然而,整个“有效载荷”是 20 个字节(八位字节)。这有什么意义?
(我想值 31 和 18 是错误告诉我的,但如果任何其他初学者发现它有用,请保留解释!)