加密解密

#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");
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值