/*
利用异或预算对文件进行加密 主要是读取文件中的字符
对每个字符对KEY进行异或运算保存到另外一个文件中 从而实现加密的功能
由于异或的性质 加密解密可以使用同一个函数
*/
#include "stdafx.h"
#include <filesystem>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;
#define OK 0
#define ERR -1
#define KEY 0xa9
int FileConvert(const char* szOldFile, const char* szNewFile, int icount)
{
//读二进制文件
ifstream fin(szOldFile, std::ios::binary | std::ios::in);
std::vector<char> buf(fin.seekg(0, std::ios::end).tellg());
fin.seekg(0, std::ios::beg).read(&buf[0], static_cast<std::streamsize>(buf.size()));
fin.close();
//仅对文件前1000字节进行修改,此处可修改成对整个文件内容修改
char cTemp;
for (int n = 0; n < icount; n++)
{
cTemp = buf[n];
putchar(cTemp);
buf[n] ^= KEY;
}
//写二进制文件
ofstream fout(szNewFile, std::ios::binary | std::ios::out);
fout.write((char*)&buf[0], static_cast<std::streamsize>(buf.size()));
fout.close();
return OK;
}
int main(int argc, char**argv)
{
if (argc > 2)
{
int a = FileConvert(argv[1], argv[2], 1000);
std::cout << "argv0:" << argv[0] << "\"\n";
std::cout << "argv1:" << argv[1] << "\"\n";
std::cout << "argv2:" << argv[2] << "\"\n";
}
system("pause");
return 0;
}