【发布时间】:2018-01-13 18:36:36
【问题描述】:
我正在尝试使用 AES EAX 模式和 CryptoPP 库加密文件。 下面是 main() 内容:
SecByteBlock key(AES::MAX_KEYLENGTH);
rnd.GenerateBlock(key, key.size());
ArraySource as(key.begin(), key.size(), true, new FileSink("key.bin"));
SecByteBlock iv(AES::BLOCKSIZE);
rnd.GenerateBlock(iv, AES::BLOCKSIZE);
EAX<AES>::Encryption encryptor;
encryptor.SetKeyWithIV(key, key.size(), iv, iv.size());
FileSink file("image.jpg.enc");
ArraySource write_iv(iv, iv.size(), true, new Redirector(file));
FileSource write_ciphertext("image.jpg", true, new AuthenticatedEncryptionFilter(encryptor, new Redirector(file)));
const int delete_file = std::remove("image.jpg");
std::cout << delete_file << std::endl;
std::cout << "Error code is:" << GetLastError();
return 0;
加密部分成功结束,但是,删除原始文件(image.jpg)失败。我得到的输出是:
Error code is:32
这是一个ERROR_SHARING_VIOLATION,意思是“该进程无法访问该文件,因为它正被另一个进程使用。”
我的问题是:如何在 Filesource 行之后关闭文件,以便能够在之后删除文件?使用经典的ifstream,它将是file.close(),但是我如何使用 Crypto++ 来做到这一点?
【问题讨论】:
-
可能在 FileSource 的析构函数执行之后。
-
ArraySource as(key.begin(), key.size(), true, new FileSink("key.bin"));- 看起来对称密钥正以纯文本形式写入文件系统。 -
是的,对称密钥是用纯文本编写的,但仅用于测试目的,而我试图删除原始文件
标签: c++ windows encryption crypto++