C++ 下兩大加密庫, openssl 和 cryptopp,openssl 使用更廣泛一些,不過編譯起來得用命令行,且生成的都是動態(tài)庫,不過接口是純 C 的,調(diào)用方使用更方便一些; cryptopp 使用 C++ 模板編寫,可編譯為靜態(tài)庫使,不過使用不當(dāng),會莫名其妙的 crash。
cryptopp 的鏈?zhǔn)秸{(diào)用,new 出來的對象你看不到 delete,估計(jì)是調(diào)用方維持了指針,負(fù)責(zé) delete。
字節(jié)緩沖區(qū)可用 std::vector<byte> 也可用自帶的 ByteQueue 和 SecByteBlock。
最坑的是 AES 加解密已經(jīng)不支持構(gòu)造函數(shù)入?yún)ⅲ酶淖冇?/p>
原始方式
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]);
生成隨機(jī)密鑰
AutoSeededRandomPool rnd;
SecByteBlock key(AES::DEFAULT_KEYLENGTH);
rnd.GenerateBlock( key, key.size());