gpt4 book ai didi

c++ - 解密 AES-256 加密文件不起作用

转载 作者:搜寻专家 更新时间:2023-10-31 01:40:09 25 4
gpt4 key购买 nike

我使用 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();
}

与上面生成的解密 key 相同,InitializationVector iv 用于解密。

解密抛出异常AES-256/EAX : message authentication failed

我在这里做错了什么以及如何正确解密上面的 encryptrd 文件。

最佳答案

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

关于c++ - 解密 AES-256 加密文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30128055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com