使用名为Encryptor
struct Encryptor {
char m_bKey;
Encryptor(char bKey) : m_bKey(bKey) {}
char operator()(char bInput) {
return bInput ^ m_bKey++;
}
};
我可以使用
轻松加密给定文件std::ifstream input("in.plain.txt", std::ios::binary);
std::ofstream output("out.encrypted.txt", std::ios::binary);
std::transform(
std::istreambuf_iterator<char>(input),
std::istreambuf_iterator<char>(),
std::ostreambuf_iterator<char>(output),
Encryptor(0x2a));
然而试图通过调用
来恢复它std::ifstream input2("out.encrypted.txt", std::ios::binary);
std::ofstream output2("out.decrypted.txt", std::ios::binary);
std::transform(
std::istreambuf_iterator<char>(input2),
std::istreambuf_iterator<char>(),
std::ostreambuf_iterator<char>(output2),
Encryptor(0x2a));
只能部分工作。以下是文件大小:
in.plain.txt: 7,700 bytes
out.encrypted.txt: 7,700 bytes
out.decrypted.txt: 4,096 bytes
在这种情况下,似乎该方法仅适用于第一个2**12
字节,可能只适用于它的倍数(可能是我的文件系统的块大小?)。 为什么我有此行为以及解决方法是什么?
答案 0 :(得分:4)
形成您提供的源代码,看起来输出流在您尝试从磁盘读取之前未关闭。由于ofstream类中存在输出缓冲区,因此可能是您的数据仍在缓冲区中,因此不会刷新到磁盘。在从磁盘读取输出流之前关闭输出流应该可以解决问题。