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

来源:互联网 发布:全国软件人才证书 编辑:程序博客网 时间:2024/05/18 00:21
//Caesar密码/*理解算法最重要,最好自己动手实现试试看,可以使用MFC写一个简单的交互界面*/#include<iostream>#include<cmath>using namespace std;#define N 1000  //全局变量char str[100];     //用于存储处理前字符串char enstr[100];   //用于存储处理后字符串int num=0;           //用于累计字符数量char *p;           //用于指向处理字符串int key;//加密void encryption(){    while(*p!='\0')    {           *p=(*p-97+key)%26+97;        p++;    }    cout<<"加密后字符:"<<str<<endl<<endl;}//解密void decryption(){    while(*p!='\0')    {        *p=(*p-71-key)%26+97;        p++;    }    cout<<"解密后字符:"<<str<<endl<<endl;}//单文字破解 void get_key(){       char e;    char d;    cout<<"请输入已知位置明文:";    cin>>e;    cout<<"请输入已知位置密文:";    cin>>d;    key=abs(e-d)%26;    cout<<"密钥为:"<<key<<endl;}//全结果破解 void decrypt()  {      char x[N];        cout<<"请输入加密后的明文:\n";    cin>>x;    for(int i=1;i<=25;++i)      {          for(int j=0;;++j)          {              if(x[j]>96&&x[j]<123)                        x[j]=(x[j]-1-122)%26+122;              else if(x[j]>64&&x[j]<91)                  x[j]=(x[j]-1-90)%26+90;              else                  x[j]=x[j];              if(x[j]==0) break;          }          cout<<"秘钥为 "<<i<<"时,此秘钥加密前的原文为:"<<x<<endl;      }  } //主函数 int main(){        string ord;    while(1)    {        cout<<"请选择功能:\n";        cout<<"1.Encryption(加密)\n2.Decryption(解密)\n3.Decipher(破解)\n4.Exit(退出)       :  ";                p=str;        cin>>ord;        if(ord=="1")        {            cout<<"Input:请输入需要加密的内容(不支持空格和其他字符)"<<endl;            cin>>str;            p=str;            cout<<"Key:请输入密钥  ";            cin>>key;            encryption();        }        else if(ord=="2")         {            cout<<"Input:请输入需要解密的内容(不支持空格和其他字符):"<<endl;            cin>>str;            p=str;            cout<<"Key:请输入密钥  ";            cin>>key;            decryption();        }        else if(ord=="3")         {            cout<<"完全未知密文,输入明文列出所有可能请输入 1;\n已知某个明文字母的对应密文请输入 2;\n";            int choose; cin>>choose;            if(choose==1)                decrypt();             else if(choose==2)                get_key();        }        else if(ord=="4") break;        else         {            cout<<"Error :输入错误,请重新开始\n";            continue;        }             }        return 0; }

原创粉丝点击