C/C++

Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學與範例

介紹如何在 Ubuntu Linux 系統中安裝 Crypto++ 加密函式庫,並編譯使用 Crypto++ 的 C++ 程式碼。

Crypto++(亦稱 CryptoPP、libcrypto++ 或 libcryptopp)是一套開放原始碼的 C++ 密碼學函式庫,除了完整支援常見的演算法之外,Crypto++ 也包含了較冷門、較少被使用的演算法,目前已廣泛被學術界與業界使用。

安裝 Crypto++ 函式庫

套件安裝

若要在 Ubuntu Linux 中安裝 Crypto++ 函式庫,最方便的方式就是使用 apt 安裝 Ubuntu 官方收錄的 Crypto++ 函式庫開發套件:

# 安裝 Crypto++ 函式庫開發套件
sudo apt install libcrypto++-dev

自行編譯安裝

若需要使用最新版的 Crypto++ 函式庫,可以下載最新的 Crypto++ 原始碼,自行編譯後安裝使用。

Crypto++ 最新的原始碼可以從官方網站下載:

# 下載 Crypto++ 原始碼並解壓縮至 cryptopp870 目錄
https://cryptopp.com/cryptopp870.zip
unzip -a cryptopp870.zip -d cryptopp870

或是從 Crypto++ 的 GitHub 套件庫下載:

# 從 GitHub 下載 Crypto++ 原始碼
git clone git://github.com/weidai11/cryptopp.git

進入原始碼目錄,執行 make 編譯:

# 編譯 Crypto++ 
cd cryptopp870
make -j2

這裡 make 的參數 -j2 是指定同時執行 2 個編譯工作平行處理,通常工作數量可以指定為 CPU 的核心數以加速編譯。

編譯完成後,執行基本的 Crypto++ 函式庫 Validation Suite 測試程式:

# 測試 Crypto++ 函式庫
./cryptest.exe v
[略]
Testing NaCl library functions...

passed    crypto_box, crypto_box_beforenm, crypto_box_afternm
passed    crypto_box_open, crypto_box_open_afternm
passed    crypto_box_keypair pairwise consistency
passed    crypto_sign, crypto_sign_open, crypto_sign_keypair
passed    crypto_sign_keypair pairwise consistency

All tests passed!

Seed used was 1670829385      
Test started at Mon Dec 12 15:16:25 2022
Test ended at Mon Dec 12 15:16:30 2022

測試程式的輸出很長,基本上只要看最後是否有出現 All tests passed 的訊息即可。

再執行 Test Vectors 測試:

# 測試 Crypto++ 函式庫
./cryptest.exe tv all
[略]
Testing MessageDigest algorithm Whirlpool.
.........
Testing SymmetricCipher algorithm AES/XTS.
........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Tests complete. Total tests = 17549. Failed tests = 0.

確認輸出中沒有任何錯誤之後,就可以進行安裝了,若要將 Crypto++ 安裝至系統預設的路徑(/usr/local)下,可以執行:

# 將 Crypto++ 安裝至系統預設目錄 /usr/local
sudo make install

如果沒有管理者權限,亦可透過 PREFIX 變數指定安裝路徑,將 Crypto++ 安裝至自行指定的路徑之下:

# 將 Crypto++ 安裝至 ~/cryptopp 目錄
make install PREFIX=~/cryptopp

若要移除自行編譯安裝的 Crypto++ 函式庫,可以使用對應的 make uninstall 指令:

# 將安裝至系統預設目錄 /usr/local 的 Crypto++ 移除
sudo make uinstall

# 將安裝至 ~/cryptopp 目錄的 Crypto++ 移除
make uninstall PREFIX=~/cryptopp

編譯 Crypto++ 程式

以下是一個使用 Crypto++ 函式庫來計算 SHA1 雜湊碼的範例,這裡我們將示範如何使用 g++ 編譯器編譯這個程式:

#include <iostream>
#include <cstdlib>
#include "cryptlib.h"
#include "filters.h"
#include "files.h"
#include "sha.h"
#include "hex.h"
int main () {
    using namespace CryptoPP;
    SHA1 hash;
    std::string msg = "Crypto++ is a free C++ library for cryptography.";
    std::string digest;
    HexEncoder encoder(new FileSink(std::cout));

    hash.Update((const byte*)msg.data(), msg.size());
    digest.resize(hash.DigestSize());
    hash.Final((byte*) digest.c_str());

    std::cout << "Message: " << msg << std::endl;
    std::cout << "SHA1 Digest: ";
    StringSource(digest, true, new Redirector(encoder));
    std::cout << std::endl;

    return EXIT_SUCCESS;
}

將這份程式碼儲存至 sha1.cpp 之後,若採用 Ubuntu Linux 官方套件庫的 Crypto++ 函式庫,可以使用以下 g++ 指令進行編譯:

# 編譯 Crypto++ 程式(Ubuntu Linux 官方套件庫 Crypto++ 函式庫)
g++ -I/usr/include/crypto++ -o sha1 sha1.cc -lcryptopp

如果是自行安裝的 Crypto++ 函式庫,可依照自己的安裝路徑,調整引入標頭檔的目錄以及函式庫連結檔的位置,以預設的 /usr/local 安裝路徑來說,編譯指令可以改成這樣:

# 編譯 Crypto++ 程式(自行編譯安裝 Crypto++ 函式庫)
g++ -I/usr/local/include/cryptopp -o sha1 sha1.cc \
    -L/usr/local/lib/libcryptopp.a -lcryptopp

編譯完成後,即可執行這個測試程式:

# 執行測試程式
./sha1
Message: Crypto++ is a free C++ library for cryptography.
SHA1 Digest: 1A7588E2529D53DD5200371F6CF5084754A9B76C

參考資料

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago