#include <iostream>
#include <fstream>
using namespace std;
class Coding
{
public:
char* Deciphering(char* input,char* key);
char* Encryption(char* input,char* key);
int Len(char* str);
};
int Coding::Len(char* str)
{
return strlen(str);
}
char* Coding::Encryption(char* input,char* key)
{
int lenk=Len(key);
int temp=Len(input);
for(int i=0;i<temp;i++)
{
if(input[i]<91&&64<input[i])
input[i]+=32;
else if(input[i]<123&&96<input[i])
input[i]-=32;
input[i]+=key[i%lenk];
}
return input;
}
char* Coding::Deciphering(char* input,char* key)
{
int lenk=Len(key);
int temp=Len(input);
for(int i=0;i<temp;i++)
{
input[i]-=key[i%lenk];
if(input[i]<91&&input[i]>64)
input[i]+=32;
else if(input[i]<123&&input[i]>96)
input[i]-=32;
}
return input;
}
void main(int argc,char*argv[])
{
if(argc!=5)
{
cout<<endl<<"请按以下格式输入:Cryptography_1 -e/-d key inputfile outputfile "<<endl;
exit(0);
}
Coding obj;
fstream file(argv[3],ios::out|ios::in|ios::binary, _SH_DENYRW);
fstream file2(argv[4],ios::out|ios::in|ios::trunc|ios::binary, _SH_DENYRW);
char* key=argv[2];
char* select=argv[1];
int length=0;
file.seekg(0,ios::end);
length=file.tellg();
char* data=new char[length+1];
file.seekg(0,ios::beg);
file.getline(data,length+1);
//cout<<obj.Len(data)<<data<<endl;
char* output="指令无法识别!!无法完成加解密任务!!";
//cout<<argv[1]<<endl;
if(select[1]=='e')
output=obj.Encryption(data,key);
else if(select[1]=='d')
output=obj.Deciphering(data,key);
file2.write(output,obj.Len(output));
}