Я пытаюсь перенести процедуру дешифрования из программы 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?
1 ответ
Если посмотреть на реализацию, текущие итерации crypto ++ поддерживают только Rijndael с размером блока 16 байт. Поскольку IV должен быть в точности одним блоком для режима CBC, использование Rijndael с размером блока 256 бит не представляется возможным.
FixedBlockSize<32>
, и он "просто работает", то, скорее всего, мало что можно сделать. Стоит попробовать, но я бы не задерживал дыхание.
Похожие вопросы
Связанные вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.
FixedBlockSize<16>
?Rijindael_Info32
как расширениеpublic FixedBlockSize<32>, public VariableKeyLength<16, 16, 32, 8>
или дажеpublic FixedBlockSize<32>, public FixedKeyLength<32>
, а остальная часть алгоритма просто возьмется и заработает , поскольку я недостаточно знаком с CryptoPP, чтобы сделать этот звонок. Пессимист во мне говорит, что это маловероятно.