ASN1结构编码

时间:2015-06-18 10:33:57

标签: asn.1 encoder decoder

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

1 个答案:

答案 0 :(得分: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]

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