失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 暴力破解凯撒加密(未知密钥时)

暴力破解凯撒加密(未知密钥时)

时间:2021-02-18 08:12:03

相关推荐

暴力破解凯撒加密(未知密钥时)

一、原理

已知明文情况下,根据凯撒加密算法可知,密文只有26种可能;

将26种情况全部列出,正确的明文因为含有一定的信息,所以很容易辨认

#include<iostream>#include<string>using namespace std;int main(){string a;//密文 string b=a;//存放明文 cout<<"要破解的密文:"; getline(cin,a); int k; //未知密钥//根据凯撒加密算法知明文有26种可能性//暴力列出所有的26种情况cout<<"所有可能的明文:"<<endl;for(k=0;k<26;k++) {cout<<"密钥K="<<k<<"时:" ;for(int i=0;i<a.length();i++){if(a[i]!=' '){ //相减过程出会出现负数情况,因此需要先进行“+26”操作再取余 if(a[i]>='a' && a[i]<='z') cout<<char((a[i]-k-'a'+26)%26+'a');if(a[i]>='A' && a[i]<='Z') cout<<char((a[i]-k-'A'+26)%26+'A');}if(a[i]==' ') cout<<" ";}cout<<endl; }}

二、运行结果

三:由于破解算法只需要将所有情况列出,所以

if(a[i]>='a' && a[i]<='z') cout<<char((a[i]-k-'a'+26)%26+'a');if(a[i]>='A' && a[i]<='Z') cout<<char((a[i]-k-'A'+26)%26+'A');

可以简单的写成(加法更容易操作):

if(a[i]>='a' && a[i]<='z') a[i]=char((a[i]+K-'a')%26+'a'); if(a[i]>='A' && a[i]<='Z') a[i]=char((a[i]+K-'A')%26+'A');

用减法只是为了对应我的代码运行结果上的文字说明:“当密钥= 时”:

如果觉得《暴力破解凯撒加密(未知密钥时)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。