C++ 下兩大加密庫, openssl 和 cryptopp,openssl 使用更廣泛一些,不過編譯起來得用命令行,且生成的都是動態庫,不過接口是純 C 的,調用方使用更方便一些; cryptopp 使用 C++ 模板編寫,可編譯為靜態庫使,不過使用不當,會莫名其妙的 crash。
cryptopp 的鏈式調用,new 出來的對象你看不到 delete,估計是調用方維持了指針,負責 delete。
字節緩沖區可用 std::vector<byte> 也可用自帶的 ByteQueue 和 SecByteBlock。
最坑的是 AES 加解密已經不支持構造函數入參,得改變用
原始方式
CFB_Mode<AES>::Encryption cfbEncryption(key, key.size(), iv);
最新方式
CFB_Mode< AES >::Encryption e;
e.SetKeyWithIV(&key_block[0], key_block.size(), &iv_block[0]);
生成隨機密鑰
AutoSeededRandomPool rnd;
SecByteBlock key(AES::DEFAULT_KEYLENGTH);
rnd.GenerateBlock( key, key.size());