//加密算法
//只针对大写字母明文信息
#include<iostream>
#include<string.h>
using namespace std;
int main() {
string mw; //明文
int k; //秘钥,移位数
char l[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
while(true) {
cout<<"请输入密码"<<endl;
cin>>mw;
cout<<"请输入秘钥"<<endl;
cin>>k;
for(int i=0;i<mw.length();i++) {
if((mw[i]+k)<='Z')
{mw[i] = mw[i] + k;}
else
{
int j = (mw[i]+k-'Z') % 26;
mw[i] = l[j-1];
}
}
cout<<"加密结果:"<<endl;
cout<<mw<<endl;
cout<<endl;
}
return 0;
}
//解密算法
//假设不知道明文,只知道密文
#include<iostream>
#include<string.h>
using namespace std;
int main() {
//明文为"LETTER"
string jm1 = "MFUUFS"; //k=1时的加密结果
string jm6 = "RKZZKX";
string jm11 = "WPEEPC";
string jm16 = "BUJJUH";
string jm21 = "GZOOZM";
string jm29 = "OHWWHU";
string test;
char l[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
for(int i=0;i<=25;i++) {
test = jm6;
for(int j=0;j<test.length();j++) {
if((test[j]+i)<='Z')
{test[j] = test[j]+i;}
else
{test[j] = l[(test[j]+i-'Z')%26-1];}
}
cout<<test<<endl;
}
return 0;
}
解密时,我选的密文是jm16 = "BUJJUH"
解密复杂度:26*密文长度,很容易被破译