您的位置:首页 > 编程语言 > C语言/C++

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

2017-10-25 09:09 232 查看
//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
;

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: