300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 简单移位密码——凯撒加密 解密算法

简单移位密码——凯撒加密 解密算法

时间:2022-09-12 08:58:47

相关推荐

简单移位密码——凯撒加密 解密算法

简单移位密码——凯撒加密、解密算法

移位密码是简单的替换密码(simple substitution cipher),即将明文的一个字符用相应的一个密文字符替换。

算法描述:设P=C=K=Z26,对k∈K,定义ek(x)=x+k(mod 26)=y∈C,同时dk(y)=y-k(mod 26)。编程实现:对输入的一串信息(不超过40个字符)进行加、解密,加密规则如下:将字母表看成首尾衔接的闭合环,遇大写字母用该字母后面的第3个小写字母替换,遇小写字母用该字母后面的第3个大写字母替换……

//凯撒加密算法char CaesarCipher(char a){//当字母为大写字母时,用后面第三个小写字母替换if (a >= 'A'&& a < 'X')a = a + 32 + 3;//当大写字母属于"X,Y,Z"时,将其结果减去26,保证字母表首尾衔接else if (a >= 'X'&& a <= 'Z')a = a + 32 + 3 - 26;//当字母为小写字母时,用后面第三个大写字母替换else if (a >= 'a'&& a < 'x')a = a - 32 + 3;//当大写字母属于"x,y,z"时,将其结果减去26,保证字母表首尾衔接else if (a >= 'x'&& a <= 'z')a = a - 32 + 3 - 26;return a;}

//凯撒解密算法char CaesarDecryption(char a){//当字母为大写字母时,用前面第三个小写字母替换//当大写字母属于"A,B,C"时,将其结果加上26,保证字母表首尾衔接if (a >= 'A'&& a <= 'C')a = a + 32 - 3 + 26;else if (a > 'C'&& a <= 'Z')a = a + 32 - 3;//当字母为小写字母时,用前面第三个大写字母替换//当大写字母属于"a,b,c"时,将其结果加上26,保证字母表首尾衔接else if (a >= 'a'&& a <= 'c')a = a - 32 - 3 + 26;else if (a > 'c'&& a <= 'z')a = a - 32 - 3;return a;}

int main(){string a; //定义输入string类型的字符串int index, i,size; //定义输入的索引,循环变量,字符串大小while (1){//制作选择菜单栏cout<< "=====================================" << endl;cout<< "凯撒加密——解密算法:" << endl;cout<< "1、凯撒加密算法" << endl;cout<< "2、凯撒解密算法" << endl;cout<< "3、退出程序" << endl;cout<< "请选择需要执行的操作:";cin>> index;//必须输入正确的索引才可继续if (index != 1 && index != 2 && index != 3)break;switch (index){case 1:cout<< "请输入一串需要加密的信息(不超过40个字符,属于字母范畴A—Z,a—z):";cin>> a;size= a.size();//满足字符串的大小不能超过40个字符if (size > 40){cout<< "输入字符串不能超过40个字符,请重新输入!" << endl;break; }for (i = 0; i <size; i++){//满足输入的字符串全为字母类型if (a[i] < 'A' || a[i] > 'z' || (a[i] > 'Z' && a[i] < 'a')){cout<< "所输入字符串不满足字母范畴,请重新输入!" << endl;break;}else{if (i == 0)cout<< "经过凯撒加密后的信息为:";a[i] = CaesarCipher(a[i]);cout<< a[i];}}cout<< endl;break; case 2:cout<< "请输入一串需要解密的信息(不超过40个字符,属于字母范畴A—Z,a—z):";cin>> a;size= a.size();//满足字符串的大小不能超过40个字符if (size > 40){cout<< "输入字符串不能超过40个字符,请重新输入!" << endl;break;}for (i = 0; i < size; i++){//满足输入的字符串全为字母类型if (a[i] < 'A' || a[i] > 'z' || (a[i] > 'Z' && a[i] < 'a')){cout<< "所输入字符串不满足字母范畴,请重新输入!" << endl;break;}else{if (i == 0)cout<< "经过凯撒解密后的为信息为:";a[i] = CaesarDecryption(a[i]);cout<< a[i];}}cout<< endl;break;case 3: return 0; break;} }return 1;}

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