首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASN.1误码0x‭100000FFFFFFC不确定长度编码

ASN.1误码0x‭100000FFFFFFC不确定长度编码
EN

Stack Overflow用户
提问于 2018-10-10 15:41:00
回答 3查看 778关注 0票数 0

我正在根据等级库实现误码率,我问自己一个问题:当我使用不定长度编码时,如何将Integer 0x‭100000FFFFFFFC编码为BER整数(标记0x02)?

到目前为止,我还没有在规范中找到任何转义字符,所以我假设,我不能对这样的数字进行编码,因此也必须依赖发送方知道这一点,并使用短表单长度编码发送Integer。但在BitStrings中,也出现了同样的问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-11 06:58:05

你从不对整数使用不定长度编码..。

它写在X.690 (08/2015)第8.3章(整数值的编码)中:

代码语言:javascript
复制
The encoding of an integer value shall be primitive

不定长度用于构造类型(序列,序列.)对于可以包含大值的基本类型(字符串类型、BITSTRING、八进制字符串.)。在这种情况下,规范会说:

代码语言:javascript
复制
The encoding of a bitstring value shall be either primitive or constructed at the option of the sender

CER编码规则(第9章)为您提供了编写本报告时大值的含义:

代码语言:javascript
复制
 Bitstring, octetstring, and restricted character string values shall be encoded with a primitive encoding if they would require no more than 1000 contents octets, and as a constructed encoding otherwise

因此,您可以看到,即使是一个巨大的整数,在编码时也总是小于1000个字节:因此,可以选择不对整数使用不定长度形式。

票数 2
EN

Stack Overflow用户

发布于 2018-10-10 21:41:32

AFAIK,不定长度编码只为八进制/位字符串定义,而不为数字类型定义。

此外,我认为在BER中没有任何逃避机制。

不定长度编码总是包含使用确定长度编码编码的数据块(八进制/位字符串)。在误码率术语中,不定长度总是以构造的形式存在。

有了一定的长度编码,你总是有字节计数来切割八进制流的特定位置,你不需要任何哨兵。

对于不确定长度编码,您需要那些双零哨兵(实际上是一个具有零长度值的TVL三重奏)来表示数据的结束。但你从来没有原始的,例如,非编码的数据(否则可能会干扰哨兵)作为有效载荷。

票数 0
EN

Stack Overflow用户

发布于 2018-10-10 16:12:36

您关注的场景是:(a)使用图2所示的替代构造编码;(b)内容八进制包含octets 0x0000,这将(不正确地)解释为内容结束标记。

当我第一次读到这个问题时,我的第一反应是,毫无疑问,BER说了一些关于这一点的话。也许有一种逃逸机制来避免内容中的0x0000。也许编码规则是这样的,0x0000自然不会发生。

但经过几次仔细扫描X.690规格之后,我什么也找不到。

因此,我认为您是对的:我认为发送方不应该在这样的场景中使用替代构造编码(这实际上意味着,对于具有此潜在问题的数据类型,例如整数和位字符串,永远不应该使用替代构造编码)。

作为比较,在非常特殊的情况下,在对结构进行编码时,Thrift只允许停止标记(字节00)作为“禁止字段”标记(请参阅https://github.com/erikvanoosten/thrift-missing-specification/blob/master/rpc-spec-binary-protocol.asciidoc)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52744009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档