我需要进行XOR文件加密(以任何格式),为此我必须逐个读取文件组,加密它们,然后将结果写入输出文件。
如何组织读写字节?
答案 0 :(得分:0)
你可以逐个读,但我建议读写字节块。性能方面可以更好地访问文件,只需要,操作和运行缓慢。根据内存约束,您可以增加第二个示例代码的块大小(实际1024,到您想要的字节数)。
示例代码,逐个加密:
#include <iostream>
#include <fstream>
#include <vector>
int main(int argc, char* argv[]) {
char bytes;
std::ifstream ifs("ficheroentrada", std::ios_base::binary);
std::ofstream ofs("ficherosalida", std::ios_base::binary);
while (!ifs.eof()) {
ifs.get(bytes);
bytes ^= 0xAA; // xor constant or variable
ofs.put(bytes);
}
ifs.close();
ofs.close();
return 0;
}
使用XOR进行块加密的代码(更推荐这个)
#include <iostream>
#include <fstream>
#include <vector>
int main(int argc, char* argv[]) {
std::vector<char> bytes(1024); // change the block size
std::ifstream ifs("e:\\save_out.txt", std::ios_base::binary);
std::ofstream ofs("e:\\save_out2.txt", std::ios_base::binary);
while (!ifs.eof()) {
ifs.read((char*)&bytes[0], bytes.size());
unsigned int size_read = ifs.gcount();
for (unsigned int idx = 0; idx < size_read; idx++) {
bytes[idx] ^= 0xAA; // xor constant or variable
}
ofs.write((char*)&bytes[0], size_read);
}
ifs.close();
ofs.close();
return 0;
}