Crypto++ 在 Visual Studio 2008 下的使用方式

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 過程如下︰

  1. Crypto++ 官網下載最新版的 Crypto++,我抓的版本是 5.5.2 版。
  2. 解壓縮後,開啟 cryptest.sln 檔 (本檔是 VS 2005 soluction檔,VS 2008 需要多做一步 soluciton 轉換的動作)
  3. 開啟此 soluction 後,會發現裡面有四個子專案︰cryptdll、cryptest、cryptlib、dlltest,在 cryptlib 專案上按滑鼠右鍵 -> Build
  4. 等待此 project building 結束後,在原本 Crypto++ 解壓縮的目錄下\ Win32\Output\Debug 目錄下,會發現有個 cryptlib.lib 檔,這樣就成功了。

cryptlib.lib 使用過程如下︰

  1. 使用 VS 2008 建立新專案,專案類型請選擇 Win32 Console Application
  2. Application Settings 頁面中,在 "Additional options"中,請勾選 "Precompiled header",再按下 Finish 按鈕結束設定。
  3. 在專案的目錄下,建立 include 目錄,把 Crypto++ source code 中的 header file (.h) 全部 copy 到此目錄下。
  4. 在專案的目錄下,建立 lib 目錄,把上一步驟中所產生的 cryptlib.lib 檔 copy 到此目錄下。
  5. 新增 test.cpp 檔,檔案內容我放在後面。
  6. 打開 Soluction Explorer window,在我們所建的專案上,按滑鼠右鍵 -> Properties,設定專案屬性。
  7. C/C++ -> Additional Include Directories 設定,加入我們剛剛所建立的 include 目錄路徑。
  8. C/C++ -> Code Generation -> Runtime Library 設定,請確定目前模式是在 /MT 或是 /MTd
  9. Linker -> Additional Libraries Directories 設定,加入我們剛剛所建立的 lib 目錄路徑。
  10. Linker -> Command Line 設定,加入一行 cryptlib.lib
  11. 按下 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 意見:

Asio 提到...

Hi
我想請問一下,你附上的c code 有int main 這一段code,是不是要將原來專案建立時產生的cpp檔取代?

謝謝