Я пытаюсь использовать «Ботан» для шифрования и дешифрования файлов (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();
Вы можете получить версию 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
папку, как только вы получите их релиз и распакуйте его.
Других решений пока нет …