繁体   English   中英

如何在BER中使用不确定长度编码的八位字节串中转义双空八位字节?

[英]How do you escape double null octets within an octet string encoded with indefinite length in BER?

我正在尝试用D编写基本编码规则编解码器,并且希望能够使用不确定的长度编码对数据进行编码,其中长度字节设置为0x80 ,值字节的末尾用双null分隔0x00 0x00 (内容结尾)。 但是,有时双精度null是要编码的实际值的一部分。 例如,如果您有OCTET STRING ,则两个相邻的字节可能是0x00 0x00 ,这将被解释为END OF CONTENT而不仅仅是编码值的一部分,从而导致编码值被截断(最佳情况) )。 有没有某种方法可以将双null编码而不将其解释为END OF CONTENT 还是只希望对没有双null的值进行编码? 我尚未在任何规范中找到关于此的任何信息。

永远不要将普通OCTET STRING内容放在0x80和0x00 0x00之间。 相反,您将[可能是]固定长度编码的OCTET STRING放在了那里。

换句话说,无限长度编码的单字节块“ 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标记,因为有效载荷裕量由确定长度的编码段明确定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM