【问题标题】:ASN.1 Encoding with Optional fields带有可选字段的 ASN.1 编码
【发布时间】:2014-04-12 06:47:43
【问题描述】:

假设以下对象是在 .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 将以下内容编码为二进制文件的方法吗?

【问题讨论】:

    标签: c++ c encoding asn.1


    【解决方案1】:

    请注意,您的标签 [APPLICATION C0] 到 [APPLICATION C6] 不是有效的 ASN.1 标签。 [PRIVATE P0] 也是如此。删除“C”和“P”,以便您拥有 [APPLICATION 0] 到 APPLICATION 6] 和 [PRIVATE 0],然后您的标签就可以了。此外,ASN.1 类型名称必须以大写字母开头,因此“ad”、“ab”、“ac”、“al”和“an”不是有效的类型名称。

    ASN.1 有几个编码规则,它们以不同的方式处理可选字段。 BER、DER 和 CER 在编码中使用 ASN.1 标签的存在或不存在来确定组件的存在或不存在。这意味着,如果编码具有版本字段的标签、长度和值,然后是签名字段的标签长度​​和值,则所有中间可选字段都不存在。

    PER 在每个序列的前面使用一个位掩码,每个可选字段都有一个位来指示它的存在或不存在。

    您可以在http://asn1-playground.oss.com 的免费在线 ASN.1 编译器和编码器/解码器中试用您的 ASN.1 示例,详细了解如何处理可选字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 2022-01-22
      • 2012-04-11
      • 2018-03-20
      • 2020-07-20
      相关资源
      最近更新 更多