在Qt中编译Botan示例时出错
我尝试使用Botan库对文件进行加密,并编写了以下代码:在Qt中编译Botan示例时出错,qt,botan,Qt,Botan,我尝试使用Botan库对文件进行加密,并编写了以下代码: #include <botan/botan.h> #include <cstring> #include <vector> #include <iostream> #include <memory> #include <fstream> #include <string> using namespace Botan; using namespace st
#include <botan/botan.h>
#include <cstring>
#include <vector>
#include <iostream>
#include <memory>
#include <fstream>
#include <string>
using namespace Botan;
using namespace std;
void Encrypt(SymmetricKey key, InitializationVector iv,
string inFilename, string outFilename)
{
}
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
qDebug() << "Starting Botan...";
string filePlainText = "C:\\myfile.txt";
string fileEncrypted = "C:\\encrypted.txt";
string fileDecrypted = "C:\\decrypted.txt";
string passphrase = "mypassword";
Botan::LibraryInitializer init;
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);
Encrypt(key, iv, filePlainText, fileEncrypted);
return a.exec();
}
如何解决此问题?根据和文档,get_s2k()
已被弃用,取而代之的是get_pbkdf()
我找不到最新的教程,但源代码中包含了新函数的示例。例如,doc/examples/encrypt.cpp
中的一个片段:
std::auto_ptr<PBKDF> pbkdf(get_pbkdf("PBKDF2(SHA-1)"));
SecureVector<byte> salt(8);
rng.randomize(&salt[0], salt.size());
const u32bit PBKDF2_ITERATIONS = 8192;
SymmetricKey bc_key = pbkdf->derive_key(key_len, "BLK" + passphrase,
&salt[0], salt.size(),
PBKDF2_ITERATIONS);
InitializationVector iv = pbkdf->derive_key(iv_len, "IVL" + passphrase,
&salt[0], salt.size(),
PBKDF2_ITERATIONS);
SymmetricKey mac_key = pbkdf->derive_key(16, "MAC" + passphrase,
&salt[0], salt.size(),
PBKDF2_ITERATIONS);
std::auto_ptr pbkdf(get_pbkdf(“PBKDF2(SHA-1)”);
食盐(8);
随机分配(&salt[0],salt.size());
常量u32位PBKDF2_迭代=8192;
SymmetricKey bc_key=pbkdf->派生_key(key_len,“BLK”+密码短语,
&salt[0],salt.size(),
PBKDF2_迭代);
InitializationVector iv=pbkdf->派生密钥(iv_len,“IVL”+密码短语,
&salt[0],salt.size(),
PBKDF2_迭代);
SymmetricKey mac_key=pbkdf->派生_key(16,“mac”+密码短语,
&salt[0],salt.size(),
PBKDF2_迭代);
还有其他例子。我认为源代码中的示例是最可靠的信息来源。你的编译器是你的朋友,阅读它的信息,你会发现你没有使用
derivate\u key
std::auto_ptr<PBKDF> pbkdf(get_pbkdf("PBKDF2(SHA-1)"));
SecureVector<byte> salt(8);
rng.randomize(&salt[0], salt.size());
const u32bit PBKDF2_ITERATIONS = 8192;
SymmetricKey bc_key = pbkdf->derive_key(key_len, "BLK" + passphrase,
&salt[0], salt.size(),
PBKDF2_ITERATIONS);
InitializationVector iv = pbkdf->derive_key(iv_len, "IVL" + passphrase,
&salt[0], salt.size(),
PBKDF2_ITERATIONS);
SymmetricKey mac_key = pbkdf->derive_key(16, "MAC" + passphrase,
&salt[0], salt.size(),
PBKDF2_ITERATIONS);