簡體   English   中英

是否有一個好的C ++庫可以讀取,創建和修改BER編碼的文件?

[英]Is there a good C++ library to read, create and modify BER encoded files?

有幾種工具可以自動生成用於讀寫BER編碼文件的C ++(或其他)代碼。 在我的C ++項目中,我需要庫來讀取和修改BER編碼的文件。 我無法基於給定的數據結構生成C ++類,因為沒有給定的數據結構。 用戶應該能夠添加和刪除整數,字符串等。我找到了一個開放源代碼項目,該項目的編輯器具有以下功能: http : //www.codeproject.com/Articles/4910/ASN-1-Editor

但是,這在C#中。

請讓我知道,如果您知道如何獲得具有此功能的良好C ++庫,該功能可用於我的C ++項目。

確保您具有正確的ASN定義文件。 然后轉到鏈接http://lionet.info/asn1c/asn1c.cgi

將您的ASN定義粘貼到給定的窗口中。 按下按鈕“繼續進行ASN.1編譯”。 如果遇到任何編譯錯誤,請糾正這些錯誤。 編譯成功后,它將為您的解碼器生成代碼。 嘗試一下它的好處。

沒有太多的通用BER讀取庫,因為在沒有至少某種模式知識的情況下,無法明確解析任意BER數據是不可能的。

您在CodeProject上指向的工具將編輯ASN.1模式,該模式用於創建BER編碼,但是如果您不了解數據或進行猜測,就無法朝另一個方向發展。 通過查看BER元素的ID和長度,無法判斷該元素是否包含原始數據或其他BER元素。

這是我想出的最小的示例,僅用5個字節來說明問題,有兩種截然不同的解釋:

0xA0 0x03 0x02 0x01 0x00

現在,這顯然是一種構造的,特定於上下文的類型。 它也有一定的長度。 但是里面有什么? 你不知道!

它可以是整數(0x02是整數的原始標記,0x01是len,值0x00)。

但這也可以是一個位串(您可以將位串放入構造的類型中,然后2是末尾未使用的位的數量#,這意味着我們有14位,即0000 0001 0000 00xxb = 00 0000 0100 0000b = 0x0040。

您可以編寫一個可以讀取/修改/寫入BER文件的編輯器,但是它必須知道模式,否則它將無法正確讀取任何內容。

無恥的自塞式:

我創建了一個開放源代碼的ASN1 ber編碼器/解碼器庫,該庫提供了現代的C ++接口。

該庫提供了一個編譯器,該編譯器根據ASN.1規范生成.hpp包含文件。 包含文件中提供了根據這些規范對BER數據進行編碼和解碼的功能。

https://github.com/Samuel-Tyler/fast_ber

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM