ASN.1用可选字段编码

ASN.1 Encoding with Optional fields

本文关键字:字段 编码 ASN      更新时间:2023-10-16

假设以下对象是在.asn文件中定义的。

TestObject := IMPLICIT [APPLICATION 7] SEQUENCE {
    version UTF8String, 
    a GeneralizedTime OPTIONAL,
    b [APPLICATION C0] IMPLICIT SEQUENCE OF [PRIVATE P0] IMPLICIT ad OPTIONAL,
    c [APPLICATION C1] IMPLICIT SEQUENCE OF ab OPTIONAL,
    d [APPLICATION C2] IMPLICIT ac OPTIONAL,
    e [APPLICATION C3] IMPLICIT ad OPTIONAL,
    f [APPLICATION C4] IMPLICIT al OPTIONAL,
    g [APPLICATION C6] IMPLICIT SEQUENCE OF an OPTIONAL,
    h ASNSyncPayload OPTIONAL,
    signature NULLOCTETSTRING, 
}

有多个可选字段,我不确定它们将如何编码。

有人可以解释我可以使用libtasn1将以下内容编码为二进制文件的方式吗?

请注意,您的标签[应用程序C0]通过[应用程序C6]不是有效的ASN.1标签。[私人P0]也是如此。删除" C和p",以便您通过应用程序6]和[private 0]具有[应用程序0],然后您的标签就可以了。另外,ASN.1类型名称必须以大写字母开头,因此" AD"," AB"," AC"," AL"answers" AN"不是有效的类型名称。

ASN.1有几个编码规则,这些规则以不同的方式处理可选字段。ber,der和cer在编码中使用ASN.1标签的存在或不存在,以确定组件的存在或不存在。这意味着,如果编码具有版本字段的标签,长度和值,则没有标签长度和签名字段的值,则所有中间可选字段均不存在。

每个序列中的前面都使用一个位掩码,每个可选字段都有一点,以表示其存在或不存在。

您可以在免费的在线ASN.1编译器中尝试ASN。