当前位置: 首页 > 知识库问答 >
问题:

解密AES-256加密文件时不工作

夔博
2023-03-14

我使用Botan库进行加密,我的加密代码如下所示。

  LibraryInitializer init;
  AutoSeeded_RNG rng;
  string passphrase="mypassword";


  PBKDF* pbkdf = get_pbkdf("PBKDF2(SHA-256)");
  SecureVector<byte> salt = rng.random_vec(16);
  InitializationVector iv(rng,16);
  OctetString aes256_key = pbkdf->derive_key(32, passphrase,&salt[0],   salt.size(), 10000 );
  cout<<"Encryption key : " << aes256_key.as_string() <<endl ;


 ifstream infile ("readme.txt");
 ofstream outfile ("encrypt.txt");



Pipe pipe(get_cipher("AES-256/EAX", aes256_key,iv, ENCRYPTION) );


pipe.start_msg();
infile>>pipe;
pipe.end_msg();

SecureVector<byte> cl = pipe.read_all();

outfile.write((const char*)cl.begin(), cl.size());


outfile.flush();
outfile.close();
infile.close();

这段代码看起来很好,可以加密输入文件。我发布这段代码是为了确定加密是否有错误。(但我假设加密做得正确)

ifstream infile2 ("encrypt.txt");
ofstream outfile2 ("decrypt.txt");




Pipe pipe2 (get_cipher("AES-256/EAX", aes256_key, iv, DECRYPTION) );


pipe2.start_msg();
infile2 >> pipe2;
pipe2.end_msg();

SecureVector<byte> cl2 = pipe2.read_all();

outfile2.write((const char*)cl2.begin(), cl2.size());

outfile2.close();
infile2.close();
}

共有1个答案

王长卿
2023-03-14

问题是ifstreamofstream假设字符输出。如果您将其配置为使用std::ios::binary作为第二个参数来处理二进制,那么您的代码应该是正确的。如果Botan API引用没有显式地编码密文,它也会使用这一点。

 类似资料:
  • 我在这个网站上用AES-256加密一个虚拟字符串: https://www.devglan.com/online-tools/aes-encryption-decryption 具有以下参数: null 当我尝试用OpenSSL从命令行解密它时: 我得到这个错误:

  • 我做了一个简单的文件加密/解密器。它将模式和要操作的文件作为参数。加密时,它生成随机字符串并使用该字符串加密文件。解密文件时,它会提示用户输入密码,并在解密时使用该密码。 我的问题是,解密时得到的不是明文,而是胡言乱语,尽管我小心翼翼地将相同的密钥写入输入。 非常感谢James K Polk提供的加密/解密代码!

  • 客户端: 服务器端:

  • 我使用以下命令加密了一个文件 openssl rand 32>test.key openssl enc-aes-256-cbc-iter 10000-pbkdf2-salt-输入test.txt-输出test.txt.enc-通过文件:test.key 我的代码 我得到的错误 我引用了以下链接 尝试使用时,仍然得到错误

  • 问题内容: 我有下面的Java代码来加密使用64个字符的密钥的字符串。我的问题是这将是AES-256加密吗? 以下是结合了divanov和laz建议的代码。 问题答案: 是的,它将是64个字符,即32个字节和256位,并且256位的任何序列都可以用作AES-256密钥。 我建议您使用DatatypeConverter.parseHexBinary(或您选择的库中的类似实用程序)将十六进制字符串转换

  • 问题内容: 我正在尝试使用PyCrypto构建两个接受两个参数的函数:消息和密钥,然后对消息进行加密/解密。 我在网络上找到了几个链接可以帮助我,但是每个链接都有缺陷: 在codekoala上的此代码使用了os.urandom,PyCrypto不建议这样做。 此外,我不能保证给函数的键具有预期的确切长度。我该怎么做才能做到这一点? 另外,有几种模式,推荐哪种?我不知道该怎么用:/ 最后,IV到底是