- 凯撒密码的加密方法:将明文中的每个字母用此字符在字母表中后面的第 k 个字母替代。它的加密过程可以表示为下面的函数:
E(k)=(m+k)modn
其中,m 为明文字母在字母表中的位置数,n 为字母表中的字母个数,k 为密钥,E(k)为密文字母在字母表中对应的位置数。
#include<bits/stdc++.h>
using namespace std;
string encrypt(){
vector<char>v(26,0);
string s;
cout<<"输入需要加密的明文:";
cin>>s;
int k;
cout<<"输入密钥:";
cin>>k;
int j=0;
for(char i='a';i<='z';i++) v[j++]=i;
cout<<"明文:"<<s<<endl;
for(char &c:s){
c=v[(c-'a'+k)%26];
}
cout<<"加密后的密文是:"<<s<<endl;
return s;
}
string decrypt(){
vector<char>v(26,0);
string s;
cout<<"输入需要解密的明文:";
cin>>s;
int k;
cout<<"输入密钥:";
cin>>k;
int j=0;
for(char i='a';i<='z';i++) v[j++]=i;
cout<<"密文:"<<s<<endl;
for(char &c:s){
if(c-'a'-k%26>0)
c=v[(c-'a'-k%26)%26];
else
c=v[abs(26-abs(c-'a'-k%26))%26];
}
cout<<"解密后的明文是:"<<s<<endl;
return s;
}
int main(){
int n=0;
cout<<"凯撒密码"<<endl;
cout<<"1.加密"<<endl;
cout<<"2.解密"<<endl;
cout<<"3.退出"<<endl;
while(n!=3){
cin>>n;
switch (n)
{
case 1:
encrypt();
cout<<"请继续选择功能"<<endl;
break;
case 2:
decrypt();
cout<<"请继续选择功能"<<endl;
break;
case 3:
n=3;
break;
default:
cout<<"输入错误,请重新输入!"<<endl;
break;
}
}
system("pause");
return 0;
}
整体比较简单,主要代码在加密和解密的字符变换上
|