Ошибка шифрования файлов с помощью Botan и Qt

Я пытаюсь использовать «Ботан» для шифрования и дешифрования файлов (AES 256). Интеграция библиотеки в Qt прошла успешно. Я следовал за многими примерами, которые я нашел в Интернете, как это руководство но я получил следующее

error:
class Botan::S2K' has no member named 'set_iterations'

Я выяснил, что версия Botan, для которой было создано руководство, устарела и что используемая мной версия (1.10.5) несовместима.

Мой вопрос:
Где я могу найти учебник для новой версии? Если их нет, где я могу загрузить установщик Windows предыдущей версии (1.8 или 1.9)?

Вот мой код до сих пор:
(Шифрование)

string file = "...";
string fileEncrypted = "...";

Botan::LibraryInitializer init;

string passphrase = "password";
AutoSeeded_RNG rng;
S2K* s2k = get_s2k("PBKDF2(SHA-256)");
s2k->set_iterations(4049);

SecureVector<byte> key_and_IV = s2k->derive_key(48, passphrase).bits_of();
SymmetricKey key(key_and_IV, 32);
InitializationVector iv(key_and_IV +32, 16);

std::ifstream in(file, std::ios::binary);
std::ofstream out(fileEncrypted, std::ios::binary);

Pipe pipe(get_cipher("AES-256/CBC", key, iv,ENCRYPTION),new DataSink_Stream(out));
pipe.start_msg();
in >> pipe;
pipe.end_msg();

2

Решение

Вы можете получить версию 1.9 от Вот, но я боюсь, что у вас есть две проблемы с использованием новой версии:

  • get_s2k() устареет, и вы должны использовать get_pbkdf() вместо.

  • Вместо того, чтобы устанавливать итерацию с помощью метода мутатора, вы могли бы передать число итераций для производного ключа в версии при использовании PBKDF вместо устаревшего S2k.

Посмотрите их пример encrypt2, например:

...
PKCS5_PBKDF2 pbkdf2(new HMAC(new SHA_160));

const u32bit PBKDF2_ITERATIONS = 8192;

SecureVector<byte> salt(8);
rng.randomize(&salt[0], salt.size());

SecureVector<byte> master_key = pbkdf2.derive_key(48, passphrase,
&salt[0], salt.size(),
PBKDF2_ITERATIONS).bits_of()
...

Вы можете проверить дополнительные примеры для деталей в doc/examples папку, как только вы получите их релиз и распакуйте его.

0

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

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