asn.1 - 如何在 BER 中以不定长度编码的八位字节字符串中转义双空八位字节?

标签 asn.1 ber

我正在尝试用 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/

相关文章:

certificate - OpenSSL 使用自定义主题字段生成和签署证书

asn.1 - 解析 EMV 事务中 GET PROCESSING OPTIONS 命令的 PDOL

encode - 手动读取编码asn文件

c# - 我可以使用 C# BerConverter.Encode() 指定一个应用程序或上下文特定的标签吗?

解码 ASN.1 X2AP 消息 - 如何在 Nokalva ASN.1 编译器中配置部分解码?

json - ASN.1 vs JSON 什么时候适合使用它们?

ssl - Erlang ASN.1 otp 将 'PKCS7' 模块 p7b 文件编译为 pem

java - 如何在 Java 中解码 DER 编码的字符串?

asn.1 - 读BERTLV时,什么时候停止?