#include<iostream>
#include<string>
#include<fstream>
#include<Windows.h>
using namespace std;
class PWoper
{
string inpatch;
string outpatch;
public:
PWoper(string in, string out)
{
inpatch = in;
outpatch = out;
}
void encrypt()
{
ifstream init(inpatch, ios::binary);
ofstream outit(outpatch, ios::binary);
if (!init || !outit)
{
cout << "IN ERROR OR OUT ERROR!" << endl;
}
int *initp = new int();
int *outitp = new int();
while (init.read((char*)initp, 1)){
//cout << *initp << endl;
*outitp = (*initp * 177 + 135) % 311;
//cout << "out--"<<*outitp << endl;
//一个字节8位,最大256;这里的 "*outitp mod 311" 数值最大311,如果以1个字读进来运算以后write装不下。
outit.write((char*)outitp, 2);
}
cout << "encrypt success!\n";
init.close();
outit.close();
//delete original data
string temp = "del ";
temp += inpatch;
//system命令只接受一个参数,以下代码实现system("del 变量")。
const char *link = temp.data();
system(link);
}
void decrypt()
{
ofstream init(inpatch, ios::binary);
ifstream outit(outpatch, ios::binary);
if (!init || !outit)
{
cout << "IN ERROR OR OUT ERROR!" << endl;
}
int *ini = new int();
int *outi = new int();
while (outit.read((char*)outi, 2)){
//cout << *outi << endl;
*ini = ((*outi - 135 + 311) * 123) % 311;
//cout <<"out"<< *ini <<endl;
//
init.write((char*)ini, 1);
}
cout << "decrypt success!\n";
init.close();
outit.close();
}
};
int main()
{
string inpatch, outpatch, str;
cout << "input InPtach: ";
cin >> inpatch;
cout << "input OutPatch: ";
cin >> outpatch;
PWoper pwoper(inpatch, outpatch);
pwoper.encrypt();
cout << "input ok to decrypt: ";
cin >> str;
//system("cls");
if (str == "ok")
pwoper.decrypt();
else {
cout << "input error!";
system("pause");
}
system("pause");
}