【问题标题】:ASN1 Structure EncodingASN1 结构编码
【发布时间】:2015-06-19 03:17:57
【问题描述】:

ASN 规则中是否允许, 一个 ASN 结构具有指向另一个 ASN 结构的八位字节字符串。 我无法在这种情况下解码, 但是一个 ASN 结构具有八位字节字符串指向本地结构 (NON_ASN)。

【问题讨论】:

    标签: asn.1 encoder decoder


    【解决方案1】:

    是的,这是完全有效的。

    通常有两种方法:通过约束和约定。执行此操作的“正确”方式是通过约束,但通常是按惯例完成的。

    ASN.1 调用这些内容约束,并使用CONTAINING 关键字来表示它们,如下所示:

    S ::= SEQUENCE {
       name    UTF8String,
       age     INTEGER
    }
    
    O ::= OCTET STRING (CONTAINING S)
    

    有关详细信息,请参阅ITU-T X.682, §11。

    这样编码的八位字节(或位)字符串使用适合编码规则的包装器进行编码。例如,假设我们想使用 BER 在八位字节字符串中编码 s S ::= { name "Calvin", age 5 }

    SEQUENCE 在 TLV 中编码如下:

    0x30 0x0b (UNIV 15, CONSTRUCTED, length 11)
       0x0c 0x06 0x43 0x61 0x6c 0x76 0x69 0x63 (UNIV 13, length 6, "Calvin")
       0x02 0x01 0x05 (UNIV 2, length 1, 5)
    

    此序列将被包装到八位字节字符串的附加 TLV 中:

    0x04 0x0d (UNIV 4, length 13)
       [TLV for S]
    

    无论是否使用内容约束,编码都是相同的。内容约束使协议标准化,并允许工具正确验证和解析消息。

    【讨论】:

    • 是否适用于UPER(Un-aligned)编解码。@Ethan
    • 是的;除了 BER/CER/DER 之外,所有 PER 变体(规范/基本、对齐/未对齐)都可以看到内容约束。 (我不确定它们是否适用于 XER,尽管我不明白为什么它们不适用。)
    猜你喜欢
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2012-11-20
    • 2019-08-23
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多