【发布时间】:2018-06-16 07:00:20
【问题描述】:
我有一个协议,其在线格式已定义,我想使用 ASN.1 对其进行编码/解码,但它似乎破坏了定义的 BER/DER/PER 选项。无论出于何种原因,协议开发人员没有将有效负载大小/长度直接放在有效负载本身之前 - 所以我不能使用自动 BER/DER。但是由于有效载荷可以是可变长度的,所以我也不能使用 PER。这是一个例子:
12'b 12'b 4'b 4'b
|------------|--------------|-------|------|
| some stuff | payload size | blah2 | blah | Header
|------------------------------------------|
| payload word 1 |
|------------------------------------------|
| ... | Payload
|------------------------------------------|
| payload word N |
|------------------------------------------|
| much stuff | many bits | such doge | wow | Trailer
|------------------------------------------|
所以这里可能有两个问题:
- 有没有办法使用其中一种 ASN.1 编码来指定某些字段作为后面字段的长度 - 所以您可以说位 9-20 包含位 33-N*32 的长度,但是您'正在跳过可能包含其他不相关垃圾的第 21-32 位?
- 我可以看到如何编写算法/规则来支持上述内容,所以如果目前无法使用 ASN.1 执行此操作,是否有方法(和文档)来编写新的对现有编码的某种规则或扩展?
编辑
为了澄清我为什么要提出 ASN.1,而不重复 a previous question,是因为它几乎正是我正在寻找的东西 - 只是显然没有办法处理我在这里询问的特定用例.我需要反序列化现有的二进制协议,我不想自己编写,因为已经有很多 tools 声称他们可以做某种形式的这种事情。如果有人有其他建议,我很乐意尝试。
【问题讨论】:
-
从显示的示例中,似乎很难找到从编码到 ASN.1 抽象值的映射,反之亦然。那么问题来了,你为什么要使用 ASN.1?
-
ASN.1 位于表示级别,与您自己的协议规范无关。我同意@Henry,目前尚不清楚您在这里查看 ASN 的原因。
-
@Crypt32 我看不出 OSI 模型与我的问题有什么关系,无论如何这不一定是真的。 ASN.1 可用于序列化和反序列化二进制数据,无论它是什么“层”。我只是问是否有办法将它用于我正在处理的数据包格式。欢迎使用替代品。