#include<iostream>
#include<string>
#include<vector>
#include<time.h>
#include<stdlib.h>
#include<fstream>
#include<sstream>
using namespace std;
vector<int> s1;
class JIAJIEMI{
public:
void yuanmima();
void jiami();
void jiemi();
};
void JIAJIEMI::yuanmima(){
srand(time(NULL));
vector<int> s2;
vector<int> ws;
vector<int> v;
vector<int> c;
int i1,k,b,n,q,z,x;
int r,e,a1;
int y,j1,x1;
long sum=0;
int w[10];
int a[10][10];
fstream file1;
char fn1[10];
cout<<"请输入你要把用来加密的密码存入的文件夹名称:";
cin>>fn1;
file1.open(fn1,ios::out);
srand(time(NULL));
int k1;
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
k1=rand()%10;
a[i][j]=k1;
cout<<a[i][j]<<" ";
if(j==9)
cout<<endl;
}
}
cout<<"请你首先确定指令的个数:"<<endl;
cin>>a1;
// if(a1>10&&a1<4)
// {cout<<"你的输入有错!";
// exit(0);}
cout<<"请你输入指令:"<<endl;
for(int j=0;j<a1;j++)
{cin>>e;
c.push_back(e);
}
cout<<"随机产生的质数是:"<<endl;
int p=c.size();
for(n=2;n<=100;n++)
{
for(i1=2;i1<n;i1++)
if(n%i1==0)
break ;
if(i1==n)
s2.push_back(n);
}
const d=s2.size();
for(int m=1;m<=p;m++)
{b=s2[rand()%d];
cout<<b<<" ";
ws.push_back(b);} //随机产生的质数存在了w向量里
cout<<endl;
for(int k=0;k<p;k++)
{z=c[k]*ws[k];
sum=sum+z;
}
w[0]=sum%10+1;
cout<<"w[0]="<<w[0]<<endl;
for(int i=1;i<=p;i++)
{w[i]=(w[i-1]+c[i-1])%10+1;
cout<<w[i]<<" ";
}
{ for(int i=1;i<=p;i++)
a[w[i]-1][i-1]=c[i-1];}
for(int m=0;m<10;m++)
{for(n=0;n<10;n++)
{
y=a[m][n];
s1.push_back(y);
file1<<y;
}
}
cout<<endl;
for(int i=0;i<s1.size();i++)
{ cout<<s1[i]<<" ";
// file1<<s1[i];
if((i+1)%10==0)
cout<<endl;}
c.clear();
s1.clear();
}
//------------------------------------------------------------------------------
void JIAJIEMI::jiami()
{
char ch;
fstream file1,file2;
char fn1[10],fn2[10];
cout<<"输入源文件名:";
cin>>fn1;
cout<<"输入目标文件名:";
cin>>fn2;
file1.open(fn1,ios::in);
file2.open(fn2,ios::out);
yuanmima();
int i=0;
while ((ch=file1.get())!=EOF)
{
ch=char(ch+s1[i]);
i++;
if(i==99)
i=0;
file2.put(ch);
}
}
void JIAJIEMI::jiemi(){
vector<int> s;
char ch;
fstream file1,file2,file3;
char fn1[10],fn2[10],fn3[10];
cout<<"输入需要解密的文件名:";
cin>>fn1;
cout<<"输入目标文件名:";
cin>>fn2;
cout<<"输入给被加密文件的原密码文件名:";
cin>>fn3;
file1.open(fn1,ios::in);
file2.open(fn2,ios::out);
file3.open(fn3,ios::in);
while((ch=file3.get())!=EOF)
{ ch=int(ch)-48;
s.push_back(ch);}
cout<<"开始解密!......"<<endl;
int i=0;
while ((ch=file1.get())!=EOF)
{
ch=char(ch-s[i]);
i++;
if(i==99)
i=0;
file2.put(ch);}
s.clear();
cout<<"解密已经完成!请注意查看!"<<endl;
}
int main(){
JIAJIEMI s;
char chioce;
string s1;
cout<<"*************************欢迎使用简易文件加密解密程序************************"<<endl;
while(chioce!='3') {
cout<<"/t/t/t/t1.加密./n/t/t/t/t2.解密./n/t/t/t/t3.退出程序!/n";
cout<<"请你选择:";
cin>>s1;
if(s1.size()==1)
{
istringstream s2(s1);
s2>>chioce;
switch(chioce)
{case'1':
s.jiami();
break;
case'2':
s.jiemi();
break;
case'3':
cout<<"你已安全退出本程序!";break;
default:
cout<<"你的输入有错!请重新输入1或2!"<<endl;
}
}
else
cout<<"你的输入有错!请重新输入1或2!"<<endl;
}
system("pause");
}