除非您正在解码仅包含基本 ASN.1 类型(例如 INTEGER、SEQUENCE 等)的数据结构,否则您需要将顶级 ASN.1 数据结构对象传递给解码器。这样,解码器可以将自定义标签(BER/DER/CER 序列化中的 TLV 元组)与数据结构对象中存在的相同标签匹配。例如:
custom_int_type = Integer().subtype(implicitTag=Tag(tagClassContext, tagFormatSimple, 40))
custom_int_instance = custom_int_type.clone(12345)
serialization = encode(custom_int_instance)
# this will fail on unknown custom ASN.1 type tag
custom_int_instance, rest_of_serialization = decode(serialization)
# this will succeed as custom ASN.1 type (containing tag) is provided
custom_int_instance, rest_of_serialization = decode(serialization, asn1Spec=custom_int_type)
这是解码器上pyasn1 文档的链接。
要将 ASN.1 语法传递给 pyasn1 解码器,您必须首先将语法转换为 pyasn1/Python 对象树。这是一项一次性操作,有时可以使用asn1late工具自动执行。
我的另一个担心是您可能正在读取一小部分序列化数据(5 个八位字节)。如果您的数据是使用“无限长度编码模式”序列化的,那么这可能是一个有效的操作,否则解码器可能会因输入不足而失败。