四种古典密码的C++实现(4)-----Caesar密码

  1 //Caesar密码
  2 /*理解算法最重要,最好自己动手实现试试看,可以使用MFC写一个简单的交互界面*/
  3 #include<iostream>
  4 #include<cmath>
  5 using namespace std;
  6 
  7 #define N 1000  
  8 //全局变量
  9 char str[100];     //用于存储处理前字符串
 10 char enstr[100];   //用于存储处理后字符串
 11 int num=0;           //用于累计字符数量
 12 char *p;           //用于指向处理字符串
 13 int key;
 14 
 15 //加密
 16 void encryption()
 17 {
 18     while(*p!='\0')
 19     {   
 20         *p=(*p-97+key)%26+97;
 21         p++;
 22     }
 23     cout<<"加密后字符:"<<str<<endl<<endl;
 24 }
 25 //解密
 26 void decryption()
 27 {
 28     while(*p!='\0')
 29     {
 30         *p=(*p-71-key)%26+97;
 31         p++;
 32     }
 33     cout<<"解密后字符:"<<str<<endl<<endl;
 34 }
 35 //单文字破解 
 36 void get_key()
 37 {   
 38     char e;
 39     char d;
 40     cout<<"请输入已知位置明文:";
 41     cin>>e;
 42     cout<<"请输入已知位置密文:";
 43     cin>>d;
 44     key=abs(e-d)%26;
 45     cout<<"密钥为:"<<key<<endl;
 46 }
 47 //全结果破解 
 48 void decrypt()  
 49 {  
 50     char x[N];
 51     
 52     cout<<"请输入加密后的明文:\n";
 53     cin>>x;
 54     for(int i=1;i<=25;++i)  
 55     {  
 56         for(int j=0;;++j)  
 57         {  
 58             if(x[j]>96&&x[j]<123)        
 59                 x[j]=(x[j]-1-122)%26+122;  
 60             else if(x[j]>64&&x[j]<91)  
 61                 x[j]=(x[j]-1-90)%26+90;  
 62             else  
 63                 x[j]=x[j];  
 64             if(x[j]==0) break;  
 65         }  
 66         cout<<"秘钥为 "<<i<<"时,此秘钥加密前的原文为:"<<x<<endl;  
 67     }  
 68 } 
 69 //主函数 
 70 int main()
 71 {    
 72     string ord;
 73     while(1)
 74     {
 75         cout<<"请选择功能:\n";
 76         cout<<"1.Encryption(加密)\n2.Decryption(解密)\n3.Decipher(破解)\n4.Exit(退出)       :  ";
 77         
 78         p=str;
 79         cin>>ord;
 80         if(ord=="1")
 81         {
 82             cout<<"Input:请输入需要加密的内容(不支持空格和其他字符)"<<endl;
 83             cin>>str;
 84             p=str;
 85             cout<<"Key:请输入密钥  ";
 86             cin>>key;
 87             encryption();
 88 
 89         }
 90         else if(ord=="2") 
 91         {
 92             cout<<"Input:请输入需要解密的内容(不支持空格和其他字符):"<<endl;
 93             cin>>str;
 94             p=str;
 95             cout<<"Key:请输入密钥  ";
 96             cin>>key;
 97             decryption();
 98         }
 99         else if(ord=="3") 
100         {
101             cout<<"完全未知密文,输入明文列出所有可能请输入 1;\n已知某个明文字母的对应密文请输入 2;\n";
102             int choose; cin>>choose;
103             if(choose==1)
104                 decrypt(); 
105             else if(choose==2)
106                 get_key();
107         }
108         else if(ord=="4") break;
109         else 
110         {
111             cout<<"Error :输入错误,请重新开始\n";
112             continue;
113         } 
114         
115     }
116     
117     return 0; 
118 }

 

posted @ 2017-04-12 19:50  nanashi  阅读(663)  评论(0编辑  收藏  举报