我正在尝试用 D 编写基本编码规则编解码器,并且我希望能够使用不定长度编码对数据进行编码,其中长度字节设置为 0x80
和结尾值字节由双空0x00 0x00
(内容结束)划分。但是,有时双 null 是正在编码的实际值的一部分。例如,如果您有一个OCTET STRING
,则两个相邻字节可能是0x00 0x00
,这将被解释为END OF CONTENT
,而不是只是编码值的一部分,导致编码值被截断(最好的情况)。有没有某种方法可以对双空值进行编码,而不会将其解释为END OF CONTENT
?或者您是否希望仅对没有双空值的值进行编码?我还没有在任何规范中找到任何与此相关的内容。
最佳答案
您永远不会将纯 OCTET STRING 内容放在 0x80 和 0x00 0x00 之间。相反,您将确定长度编码的八位字节字符串的[可能的片段]放在那里。
换句话说,不定长度编码的单八位字节分块“AB”ASCII 字符串(例如十六进制的 0x41 0x42)将如下所示:
0x24 0x80 0x04 0x01 0x41 0x04 0x1 0x42 0x00 0x00
^ ^ ^ ^
outer header inner chunk #1 inner chunk #2 outer EOO sentinel
最终结果是解码器不必扫描实际的有效负载来搜索 EOO 标记,因为有效负载边际是由定长编码片段明确定义的。
关于asn.1 - 如何在 BER 中以不定长度编码的八位字节字符串中转义双空八位字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46709735/