【发布时间】:2015-06-19 03:17:57
【问题描述】:
ASN 规则中是否允许, 一个 ASN 结构具有指向另一个 ASN 结构的八位字节字符串。 我无法在这种情况下解码, 但是一个 ASN 结构具有八位字节字符串指向本地结构 (NON_ASN)。
【问题讨论】:
ASN 规则中是否允许, 一个 ASN 结构具有指向另一个 ASN 结构的八位字节字符串。 我无法在这种情况下解码, 但是一个 ASN 结构具有八位字节字符串指向本地结构 (NON_ASN)。
【问题讨论】:
是的,这是完全有效的。
通常有两种方法:通过约束和约定。执行此操作的“正确”方式是通过约束,但通常是按惯例完成的。
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]
无论是否使用内容约束,编码都是相同的。内容约束使协议标准化,并允许工具正确验证和解析消息。
【讨论】: