256-битный размер блока Rijndael?

Я пытаюсь перенести процедуру дешифрования с C # на C ++, используя cryptopp, но у меня есть проблема. В программе 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.

Итак, как я могу расшифровать данные, когда они были зашифрованы IV с длиной = 32?

3

Решение

Глядя на реализацию, текущие итерации crypto ++ поддерживают только Rijndael с размером блока 16 байтов. Поскольку IV должен быть точно одним блоком для режима CBC, Rijndael с размером блока 256 битов, кажется, не представляется возможным.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]