1、解密iodj$vkhuCh
2、暴力解密39.4H/?BA2,0.2@.?J
#include <iostream>#include <cstdio>#include <string>using namespace std;string s,m;void shuchu(int l){for(int i=0;i<l;i++){printf("%c",m[i]);}printf("\n");}void kaisa_jiami(int k){int l=s.length();for(int i=0;i<l;i++){m[i]=(s[i]+k)%128;}printf("加密结果:");shuchu(l);}void kaisa_jiemi(){int l=s.length();int k=s[0]-'f';//因为已经知道了解密的第一个字母是f,所以我只要先算出s[0]到f的偏移量for(int i=0;i<l;i++){m[i]=(s[i]+128-k)%128;//凯撒密码是只要26个字母,而选128个全assci码表是大范围。}printf("解密结果:");shuchu(l);}void kaisa_jiemi(int k){int l=s.length();for(int i=0;i<l;i++){m[i]=(s[i]+128-k)%128;}printf("解密结果:");shuchu(l);}int main(){int n,x,k,flag1=1,flag2,flag3;while(flag1==1){printf("请输入操作方式:1、加密 2、解密 3、退出:\n");scanf("%d",&n);getchar();if(n==1){printf("请输入所要加密的字符串:");getline(cin,s);flag2=1;while(flag2==1){printf("请输入加密时的偏移量:");scanf("%d",&k);if(k>=1&&k<=127){kaisa_jiami(k);flag2=0;}elseprintf("输入错误,偏移量应在1~127之间!请重新输入!\n#############################################################\n");}}else if(n==2){printf("请输入所要解密的字符串:");getline(cin,s);flag2=1;while(flag2==1){printf("是否已知偏移量?0、未知 1、已知:");scanf("%d",&x);if(x==0){kaisa_jiemi();flag2=0;}else if(x==1){flag3=1;while(flag3==1){printf("请输入解密时的偏移量:");scanf("%d",&k);if(k>=1&&k<=127){kaisa_jiemi(k);flag3=0;}elseprintf("输入错误,偏移量应在1~127之间!请重新输入!\n#############################################################\n");}flag2=0;}elseprintf("输入错误!请重新输入!\n#############################################################\n");}}else if(n==3)flag1=0;elseprintf("输入错误!请重新输入!\n#############################################################\n");}return 0;}
如果觉得《凯撒加密 已知偏移量和未知偏移量解密》对你有帮助,请点赞、收藏,并留下你的观点哦!