如何从 BER 创建 ASN.1 规范文件?

问题描述

我们已收到供应商提供的 TLV 编码 CDR 规范文档,我们正在尝试为其构建解析器。据他们说,他们的 CDR 是按照 ASN.1 BER 编码格式化的。然而,当被要求提供 ASN.1 规范文件时,他们说他们没有它,他们的文件就是他们所拥有的。

虽然不是那么精通 ASN.1 语法,但我正在尝试将该规范逆向工程为 ASN.1 规范。

它们的标签和长度可以编码超过 1 个或 2 个字节。

让我分享一些示例记录的前几个字节:

804e 8060 8002 805c 010100 02089999999999999999 ...
804e 8066 8002 8062 010101 02089999999999999999 ...

首先,这真的符合BER ASN.1吗?因为在读取 A Layman's Guide to a Subset of ASN.1,BER,and DER 后,要使标签为 2 个字节(或更多),第一个字节的第 5-1 位必须设置为 1,而 804e 和 8002 不适合这个。

其次,如何将上述格式转换为 ASN.1 规范?

谢谢。

解决方法

CDR 数据通常由一些非 ASN.1 数据(文件头和记录头)和 ASN.1 数据组成。例如,3GPP TS 32.297。

如果没有规范,您只能在有限的程度上解析 BER。如果使用了任何隐式标记(几乎可以肯定),您将不知道实际类型。您也不会知道您知道类型的任何值的语义。

您肯定无法从编码数据样本中推断出规范,就像您可以通过查看一个句子来确定所有合法的英语句子一样。特别是,至少可以说,任何使用 CHOICE 类型都会令人困惑。

坚持接收 ASN.1 规范或被告知正在使用什么标准(如果有)。

,

首先,这真的符合 BER ASN.1 吗?

您可以使用 https://asn1.io/asn1playground/(您不需要规范来解码 BER 值)

其次,如何将上述格式转换为ASN.1 规格?

没有

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...