首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Botan和Qt加密文件时出错

使用Botan和Qt加密文件时出错
EN

Stack Overflow用户
提问于 2014-01-01 22:59:26
回答 1查看 1.2K关注 0票数 2

我试图使用"Botan“加密和解密文件(AES 256)。成功地将库集成到Qt中。我效仿了许多在互联网上找到的例子,比如这个教程,但是我得到了以下信息

代码语言:javascript
复制
error: 
class Botan::S2K' has no member named 'set_iterations'

我发现创建教程的Botan版本已经过时,我使用的版本(1.10.5)是不兼容的。

我的问题是:

我在哪里可以找到新版本的教程?如果不存在,我可以在哪里下载上一个版本(1.8或1.9)的windows安装程序?

以下是我目前的代码:(加密)

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-02 04:27:46

您可以从这里获得版本1.9,但恐怕您在使用新版本时有两个问题:

  • get_s2k()已经过时了,您应该使用get_pbkdf()
  • 与使用mutator方法设置迭代不同,当使用PBKDF而不是不推荐的derive_key时,可以将迭代次数传递给版本中的S2k。

例如,请参阅它们的encrypt2示例:

代码语言:javascript
复制
...
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20874177

复制
相关文章

相似问题

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