如何解析ASN.1二进制数据

1 投票
1 回答
4563 浏览
提问于 2025-04-18 17:33

我有一个“固定长度”的二进制ASN.1编码文件,还有一份单独的文档来说明数据元素的对应关系。比如这个二进制文件的格式是:

0070 00A0 1700 35e7 0100 0010 0299 1a11
bc10 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0001 0001
0256 1c41 aa09 0000 0000 0000 0000 0000
.....

在这里,每条记录的长度是559个字节。文档中给出了记录的结构,说明了每个部分的字节长度。这个格式是非常特定于这些数据的,所以我需要制作一个转换器。例如:

No.     Field Name     Data Length (Bytes)   Description
1         Field1             2                 Binary
2         Field2             4                 BCD
3         Field3             1                 BCD (Right Aligned)
.....

我不知道这是否是标准的ASN.1编码。描述比这里显示的要详细一些,因为它们说明了解码后的数字代表什么。有些是二进制的,有些是BCD格式的,还有一些是右对齐的BCD格式。

我对ASN.1了解不多,所以我想避免重新发明轮子。有没有什么工具(最好是用Python写的)可以让我调整一下,把这个二进制文件转换成文本CSV文件?我找不到能满足我需求的工具,除了这个。但这是一个专有工具,对我来说不太合适。

1 个回答

2

有一个用于ASN.1的模块:pyasn1

另外一个选择是使用内置的struct模块来分离字段。还有关于这个问题的答案,教你如何读取二进制编码的十进制数。

撰写回答