1. 程式人生 > >探索Crypto++(一)下載、編譯和部署

探索Crypto++(一)下載、編譯和部署

    Crypto++是一個開源的C++加密演算法庫,它包括密碼、訊息認證碼,單向雜湊函式,公鑰密碼機制,關鍵協議方案,縮小壓縮等加密演算法。本文將介紹Crypto++庫從下載到專案應用的基本步驟。(本人目前的專案需要的是AES檔案加密演算法,其他的留待以後探索

一、下載

1,登陸官網:https://www.cryptopp.com/

2,點選“Download”,將顯示如下的下載列表


    我選擇的是“5.6.5 Release”。

二、編譯

1,將下載的壓縮檔案解壓後,找到“*.sln”檔案。

    Crypto++是一個跨平臺的庫,支援“MSVC6.0 - VS2015”、“GCC3.2 - 7”等C++編譯器。我主要用於Win7 X86平臺,選擇用VS2015進行編譯。

2,直接用VS2015開啟“*.sln”檔案,它會提示“升級VC++編譯器和庫”,確認即可。

    升級完畢,在VS的解決方案資源管理器中,可以看到該solution下有四個工程,分別是:cryptdll、crypttest、cryptlib和dlltest。其中,crypttest需要依賴cryptlib,而dlltest則是對cryptdll的測試工程。

3,修改MSVC Runtime Library

    Crypto++庫支援多執行緒,上述四個工程,預設的多執行緒執行時庫都是靜態版本的,即“MT”或“MTd”,我們需要將它們修改為“MD”或“MDd”。

    為什麼要這麼修改,可以參看我的另一篇博文:http://blog.csdn.net/sagittarius_warrior/article/details/53405217

4)編譯

    可以對每個工程進行單獨編譯,也可以對整個solution進行編譯(選擇選單欄上的“build”)。我選擇的是編譯整個solution,因為單工程編譯時,編譯cryptdll是會報錯,暫時沒去查它是為什麼。

    編譯後,會生成一系列資料夾和檔案,“Win32->Output->cryptlib.lib”,這個檔案就是生成的庫檔案。事實上,這中方式僅僅只編譯了cryptlib和crypttest。

三、部署

    從上面的編譯可知,Crypto++庫有兩種釋出方式:一種是DLL(動態連結庫),一種是Lib(靜態連結庫)。我在此先嚐試Lib方式,後面有時間再探索DLL方式。下面,我將以一個win32Console

工程為例,講解如何部署Crypto++庫。

1,新建Win32 Console工程

    直接用VS2015新建一個名為“AES”的Win32 Console工程,預設即可。

2,拷貝標頭檔案

    Lib方式釋出Crypto++庫需要在目標工程下包含Crypto++原始碼資料夾下所有的標頭檔案。事實上,這些標頭檔案還是挺多的,有145個。為了方便管理,我新建一個“Include”資料夾,並編寫一個bat指令碼來將這些標頭檔案拷貝到“Include”資料夾內。bat原始碼如下:

echo start copy
mkdir Include
copy *.h Include
echo end copy
pause

    將這個Include資料夾放到目標工程原始碼目錄下,並設定它為包含目錄。

3,拷貝lib檔案

    在目標工程原始碼目錄下,新建一個“Library”資料夾,將“cryptlib.lib”拷貝進去,並將該資料夾設為“連結器->附加依賴庫目錄”。

4,連結庫檔案

    在此,我選擇用“#pragma comment(lib,"cryptlib.lib")”預編譯指令將它連結進去。也可以在工程檔案中顯示設定連結庫。

5,包含對應的標頭檔案和應用命令空間。

#include "aes.h"
#pragma comment(lib,"cryptlib.lib")
using namespace CrytoPP;

    關於標頭檔案,你需要用到那個演算法,你就包含哪個標頭檔案。比如,我這裡只用到AES,我就只包含AES的標頭檔案。

四、測試demo

    參考連結:

    ECB模式:http://www.cnblogs.com/lit10050528/p/4081658.html

    CBC模式(C):http://www.mincoder.com/article/3994.shtml

    CBC模式(C++)https://my.oschina.net/u/566591/blog/168421

    Multi-Modes :http://blog.poxiao.me/p/advanced-encryption-standard-and-block-cipher-mode/