自学内容网 自学内容网

C++实现XOR加解器

#include <Windows.h>
#include <iostream>
#include <fstream>
#include <string>

// 加解密函数,使用XOR运算
void XORCrypt(char* data, int size, const std::string& key) {
    int keyLength = key.length();
    for (int i = 0; i < size; ++i) {
        data[i] = data[i] ^ key[i % keyLength]; // 使用循环的方式重复密钥
    }
}

// 读取文件并进行XOR加密
void EncryptFile(const std::string& inputFileName, const std::string& outputFileName, const std::string& key) {
    // 打开输入文件
    std::ifstream inputFile(inputFileName, std::ios::binary);
    if (!inputFile.is_open()) {
        std::cerr << "Error: Unable to open input file." << std::endl;
        return;
    }

    // 获取文件大小
    inputFile.seekg(0, std::ios::end);
    int fileSize = inputFile.tellg();
    inputFile.seekg(0, std::ios::beg);

    // 分配内存来存储文件内容
    char* buffer = new char[fileSize];
    if (!buffer) {
        std::cerr << "Error: Memory allocation failed." << std::endl;
        inputFile.close();
        return;
    }

    // 读取文件内容到缓冲区
    inputFile.read(buffer, fileSize);
    inputFile.close();

    // 对缓冲区中的数据进行加密
    XORCrypt(buffer, fileSize, key);

    // 打开输出文件
    std::ofstream outputFile(outputFileName, std::ios::binary);
    if (!outputFile.is_open()) {
        std::cerr << "Error: Unable to open output file." << std::endl;
        delete[] buffer;
        return;
    }

    // 写入加密后的数据到输出文件
    outputFile.write(buffer, fileSize);
    outputFile.close();

    // 释放缓冲区内存
    delete[] buffer;

    std::cout << "Encryption completed successfully." << std::endl;
}

int main() {
    std::string inputFileName; // 输入文件名
    std::string outputFileName; // 输出文件名
    std::string key; // 加解密密钥

    // 获取输入文件名、输出文件名和密钥
    std::cout << "Enter input file name: ";
    std::getline(std::cin, inputFileName);

    std::cout << "Enter output file name: ";
    std::getline(std::cin, outputFileName);

    std::cout << "Enter encryption key: ";
    std::getline(std::cin, key);

    // 加密文件
    EncryptFile(inputFileName, outputFileName, key);

    system("pause");
    return 0;
}


原文地址:https://blog.csdn.net/qq_18811919/article/details/136390389

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!