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());