我正在尝试使用 cryptopp 将解密例程从 C# 程序移植到 C++,但我遇到了问题。在 C# 程序中,密钥和 IV 都是 256 位。所以我试着做这样的事情:
char *hash1 = "......";
std::string hash2;
CryptoPP::StringSource(hash1, true,new CryptoPP::Base64Decoder(new CryptoPP::StringSink(hash2)));
CryptoPP::Rijndael::Decryption decryptor(key, 32);
CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption( decryptor, iv);
CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, (new CryptoPP::StringSink( decryptedData ) ));
stfDecryptor.Put( reinterpret_cast<const unsigned char*>( hash2.c_str() ), hash2.size() );
stfDecryptor.MessageEnd();
我得到
StreamTransformationFilter:密文长度不是块大小的倍数。
我试图像这样传递 IV 大小:
CryptoPP::CBC_Mode<CryptoPP::Rijndael >::Decryption decr;
decr.SetKeyWithIV(key, 32, iv, 32);
但后来我得到:
IV 长度 32 超过最大值 16。
那么,当数据由长度= 32的IV加密时,如何解密数据?