Crypto++ 的用途請參考官網上的說明︰
free C++ library for cryptography: includes ciphers, message authentication codes, one-way hash functions, public-key cryptosystems, and key agreement schemes
最近在幫學長測試 Crypto++ 在 Visual Studio 下的使用方式,在這邊記錄一下步驟跟過程。
我是使用 Visual Studio 2008 進行編譯跟安裝,但是相同步驟經學長測試過,在 VS 2005 下應該也行得通。只是整個 compile 建置過程不要不同版本 Visual Studio 混用就可以了 (因為之前卡關了一下就是因為這個原因……)
整個過程分成兩個主要部份,第一部份為 compile Crypto++ 為 crypto.lib 檔;第二部份為使用 crypto.lib 真正來進行加解密的功能。
crypto.lib compile 過程如下︰
- 到 Crypto++ 官網下載最新版的 Crypto++,我抓的版本是 5.5.2 版。
- 解壓縮後,開啟 cryptest.sln 檔 (本檔是 VS 2005 soluction檔,VS 2008 需要多做一步 soluciton 轉換的動作)
- 開啟此 soluction 後,會發現裡面有四個子專案︰cryptdll、cryptest、cryptlib、dlltest,在 cryptlib 專案上按滑鼠右鍵 -> Build。
- 等待此 project building 結束後,在原本 Crypto++ 解壓縮的目錄下\ Win32\Output\Debug 目錄下,會發現有個 cryptlib.lib 檔,這樣就成功了。
cryptlib.lib 使用過程如下︰
- 使用 VS 2008 建立新專案,專案類型請選擇 Win32 Console Application。
- 在 Application Settings 頁面中,在 "Additional options"中,請勾選 "Precompiled header",再按下 Finish 按鈕結束設定。
- 在專案的目錄下,建立 include 目錄,把 Crypto++ source code 中的 header file (.h) 全部 copy 到此目錄下。
- 在專案的目錄下,建立 lib 目錄,把上一步驟中所產生的 cryptlib.lib 檔 copy 到此目錄下。
- 新增 test.cpp 檔,檔案內容我放在後面。
- 打開 Soluction Explorer window,在我們所建的專案上,按滑鼠右鍵 -> Properties,設定專案屬性。
- C/C++ -> Additional Include Directories 設定,加入我們剛剛所建立的 include 目錄路徑。
- C/C++ -> Code Generation -> Runtime Library 設定,請確定目前模式是在 /MT 或是 /MTd
- Linker -> Additional Libraries Directories 設定,加入我們剛剛所建立的 lib 目錄路徑。
- Linker -> Command Line 設定,加入一行 cryptlib.lib。
- 按下 F5 建 build 此專案看看,如果可以 build 成功就大功告成了!
測試檔案內容如下︰
// CryptoPP.cpp // #include "stdafx.h" #include <dsa.h> using CryptoPP::DSA; using CryptoPP::DSA_DER; using CryptoPP::DSA_P1363; #include <pubkey.h> using CryptoPP::PrivateKey; using CryptoPP::PublicKey; #include <osrng.h> using CryptoPP::AutoSeededRandomPool; #include <files.h> using CryptoPP::FileSource; using CryptoPP::FileSink; using CryptoPP::StringSource; using CryptoPP::StringSink; int main(int argc, char* argv[]) { AutoSeededRandomPool prng; // Crypto++ Key Generation DSA::Signer signer; PrivateKey& privateKey = signer.AccessPrivateKey(); privateKey.GenerateRandom( prng ); DSA::Verifier verifier( signer ); PublicKey& publicKey = verifier.AccessPublicKey(); return 0; }
以上。
1 意見:
Hi
我想請問一下,你附上的c code 有int main 這一段code,是不是要將原來專案建立時產生的cpp檔取代?
謝謝
張貼留言