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で暗号化されている場合、どうすればデータを復号化できますか?