是否有一个很好的C ++库来读取,创建和修改BER编码文件?

问题描述 投票:8回答:3

有几种工具可以自动生成用于读取和编写BER编码文件的C ++(或其他)代码。在我的C ++项目中,我需要库来读取和修改BER编码文件。我不能基于给定的数据结构生成C ++类,因为没有给定的数据结构。用户应该能够添加和删除整数,字符串等。我发现了一个开源项目,它有一个具有这种功能的编辑器:http://www.codeproject.com/Articles/4910/ASN-1-Editor

但是,这是在C#....

请告诉我,如果您知道我如何能够获得一个具有此功能的优秀C ++库,我可以将其用于我的C ++项目。

c++ asn.1 der
3个回答
2
投票

确保您具有正确的ASN定义文件。然后去链接qazxsw poi

将ASN定义粘贴到给定窗口中。按“继续ASN.1编译”按钮。如果您收到任何编译错误,请纠正这些错误。编译成功后,它将为您的解码器生成代码。试一试它的好处。


2
投票

没有过多的通用BER读取库,因为在没有至少一些架构知识的情况下明确解析任意BER数据是不可能的。

您在CodeProject指向的工具编辑ASN.1模式,这些模式用于创建BER编码,但是您不能在不了解数据或猜测的情况下向另一个方向前进。通过查看BER元素的id和长度,无法判断该元素是包含原始数据还是其他BER元素。

这是我提出的用于演示问题的最小例子,仅为5个字节,有两种截然不同的解释:

http://lionet.info/asn1c/asn1c.cgi

现在,这显然是一种构造的,特定于上下文的类型。它也有一定的长度。但它里面有什么?你说不出来!

它可以是整数(0x02是整数的原始标记,0x01是len,值0x00)。

但它也可能是一个位串(你可以把一个字符串放入构造的类型,然后2是最后未使用的位数,这意味着我们有14位,它出来0000 0001 0000 00xxb = 00 0000 0100 0000b = 0x0040。

您可以编写一个可以读取/修改/写入BER文件的编辑器,但它必须知道模式,否则它将无法正确读取任何内容。


0
投票

无耻的自插:

我创建了一个开源的ASN1 ber编码器/解码器库,它提供了一个现代的C ++接口。

该库提供了一个编译器,它可以生成.hpp包含来自ASN.1规范的文件。在包含文件中提供了根据这些规范对BER数据进行编码和解码的功能。

0xA0 0x03 0x02 0x01 0x00

© www.soinside.com 2019 - 2024. All rights reserved.