读写字节

时间:2014-07-28 12:45:54

标签: c++ visual-c++

我需要进行XOR文件加密(以任何格式),为此我必须逐个读取文件组,加密它们,然后将结果写入输出文件。

如何组织读写字节?

1 个答案:

答案 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;
}