256位Rijndael块大小

256-bit Rijndael blocksize?

本文关键字:Rijndael 256位      更新时间:2023-10-16

我正在尝试使用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加密时,我如何解密数据?

看一下实现,当前的crypto++迭代只支持16字节块大小的Rijndael。由于IV必须精确地为CBC模式的单个块,因此256位块大小的Rijndael似乎不可能。