我一直在審查使用OpenSSL的示例代碼,並且在我找到的每個示例中,創建者都選擇使用BIO_printf()將事物寫入標準輸出而不是printf()。使用BIO_printf()而不是printf()有什麼好處?
我拿走了他們的代碼,刪除了openssl/bio.h頭文件聲明,並將所有對BIO_printf()的調用更改爲常規printf()語句。程序運行的結果相同。
我正在掌握的問題是,爲什麼這些編碼器使用BIO_printf()時需要更多的設置,而不僅僅是使用printf()。您必須包含另一個標題(這會增加程序大小),您需要將文件指針設置爲要寫入的流。然後你可以打印你的消息到標準輸出。看起來比使用printf()複雜得多。
當我在BIO_printf()上搜索時,它列出了BIO_printf(3)的可能手冊頁,但沒有一個頁面實際上包含任何信息!
我決定對這兩種方法做基準測試。我打了printf("Hey\n");
1,000,000次。然後我做了BIO_printf(fp, "Hey\n");
。我只定時了BIO_printf()語句,而不是設置文件指針(這會增加時間)。與使用BIO_printf()相比,printf()的差異快了4.7倍。
他們爲什麼使用它?有什麼好處?這是我的理解,在編程中,您要麼希望代碼簡單或高效,而在BIO_printf()的情況下,它既不是。
在我的經驗中,OpenSSL的功能在於安全和抽象。 BIO_printf函數可以保護信息免於泄漏,或者簡化與BIO結構或兩者兼而有之的工作。 – Dan 2014-09-25 21:33:57
由於OpenSSL的所有問題,有一個運行的項目非常簡化了OpenSSL,並且刪除諸如BIO_printf()之類的東西是列表中的第一件事情。換句話說,有人認爲BIO_printf是一個好主意,但事實並非如此。 – gnasher729 2014-09-25 21:59:05
我的確普遍認同BIO超出SSL庫應該做的範圍的觀點。在我自己的代碼中,我根本不使用它們,我使用自己的通信渠道,只使用非BIO版本的OpenSSL函數。 – 2014-09-26 02:38:44