3

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

4

1 に答える 1

3

実装を見ると、crypto++ の現在の反復では、ブロック サイズが 16 バイトの Rijndael のみがサポートされています。IV は CBC モードでは正確に単一のブロックでなければならないため、256 ビットのブロック サイズを持つ Rijndael は可能ではないようです。

于 2013-03-19T20:05:18.023 に答える