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)!