首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Qt中编译Botan示例时出错

在Qt中编译Botan示例时出错
EN

Stack Overflow用户
提问于 2013-08-17 16:01:42
回答 1查看 640关注 0票数 1

我已经尝试使用Botan库加密文件,并编写了以下代码:

代码语言:javascript
复制
#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();
}

但是我在编译的时候遇到一个错误:

代码语言:javascript
复制
error: 'class Botan::PBKDF' has no member named 'set_iterations'
error: no matching function for call to 'Botan::PBKDF::derive_key(int, std::string&)'
...\_111-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK__Debug\..\..\..\botan\include\botan\pbkdf.h:40: candidates are: virtual Botan::OctetString Botan::PBKDF::derive_key(size_t, const std::string&, const Botan::byte*, size_t, size_t) const

我该如何解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2014-01-02 10:18:36

根据this similar question和文档,get_s2k()已被弃用,取而代之的是get_pbkdf()

我找不到最新的教程,但源代码包含了新函数的示例。例如,来自doc/examples/encrypt.cpp的代码片段

代码语言:javascript
复制
  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);

还有其他的例子。我认为源代码中的示例是最可靠的信息来源。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18286553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档