2010-04-21 49 views
1

Openssl內存BIO接收器的文檔是hereOpenSSL生物鏈:對文檔的澄清

我正在創建一個BIO鏈來將二進制字符串轉換爲base64字符串。源/彙總是一個內存位置,這使我能夠保持相同的鏈條。然而,當我寫入數據時,數據(應該)進入由OpenSSL管理的內存緩衝區,並且當從鏈中讀取時,它應該來自用戶提供的內存緩衝區。

BIO_set_mem_buf()是用來設置用戶提供的緩衝區的函數,當我使用new管理我的內存時,我將設置BIO_NOCLOSE屬性。現在爲了使用相同的鏈來寫作,我需要改變內存生物來管理自己的內存。我的問題是: 「在用戶提供自定義緩衝區後,BIO_reset()是否會將其更改回管理自己的內存?使用單個鏈的任何性能後果是否符合我的要求?」

回答

1

我不是一定要得到你的權利,但這裏是如何我通常使用OpenSSL進行:

我認爲OpenSSL的BIO結構是某種不透明流。無論我必須傳遞給OpenSSL(或從中獲取)的數據,它通常都存儲在我自己的自定義數據結構中,然後複製到OpenSSL BIO或從OpenSSL BIO複製以進行處理。

如您所述,OpenSSL的文檔在某些方面並不十分清晰。由於我們無法合理地假設其內部行爲,我相信這種做法更安全。

但是,如果您需要高性能並且想避免無用複製(這將是合法的),那麼最好問問OpenSSL Users mailing-list。他們的答案會很有說服力,我相信只有他們能夠回答文件中沒有精確描述的東西。

+0

我通過在線程本地內存中保留了BIO mem sink和bio base64過濾器的副本來解決這個問題。當解碼時,我創建了一個由我的應用程序管理的緩衝區的新生物記憶體。 – 2010-04-26 10:38:46