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

移位密码是简单的替换密码(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;
}

简单移位密码——凯撒加密、解密算法相关推荐

  1. 密码学之凯撒加密解密算法

    在密码学中,凯撒(Caeser)密码(或称恺撒加密.恺撒变换.变换加密)是一种最简单且最广为人知的加密技术.它是一种替换加密的技术. 这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行 ...

  2. 凯撒加密的python语言程序_python实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin* ...

  3. python中凯撒密码_python实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin* ...

  4. python实现凯撒密码、凯撒加解密算法

    python实现凯撒密码.凯撒加解密算法 更多python视频教程请到菜鸟教程https://www.piaodoo.com/ 凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字 ...

  5. php凯撒密码解密,凯撒加密解密.py

    # -*- coding: utf-8 -*- class CaesarCipher(object): """ 凯撒加密解密 """ def ...

  6. 移位密码(凯撒密码)

    一.移位密码(凯撒密码) 移位密码是一种简单的加密方法,它通过将明文中的每个字符按照一定规则向左或向右移动若干位来生成密文.移位密码通常使用偏移量来确定每个字符移动的位数. 二.加密解密 1. 移位加 ...

  7. php 凯撒加密解密,PHP脚本实现凯撒加(解)密

    今天在看某ctf时候遇到一题凯撒加密的题,然后看到write up里有这样一句 顿时感觉这题目有点坑啊,这要不写个脚本来跑要推到啥时候啊,于是又了本文: $text=" the text & ...

  8. C语言凯撒密码字母向后偏移三位,凯撒加密解密(java字母移位)

    1.设计思想:加密就是将字符数据转化为ASC码表中的数字,a-w之间通过加3之后再转化为字符型输出,x-z之间通过转化为ASC码表中的数字后减去23再转化为字符型输出.解密就是将字符数据转化为ASC码 ...

  9. 古典密码-凯撒加密和解密

    在密码学中,恺撒密码是一种最简单且最广为人知的加密技术. 凯撒密码最早由古罗马军事统帅盖乌斯·尤利乌斯·凯撒在军队中用来传递加密信息,故称凯撒密码.这是一种位移加密方式,只对26个字母进行位移替换加密 ...

最新文章

  1. 手机Excel怎么转换成PDF方法
  2. 关于被代理的bean的注入的问题
  3. KlayGE SVN原生支持立体显示
  4. 计算机图形什么叫参数连续性,计算机图形学--参数三次插值样条曲线.ppt
  5. android app 历史版本,怎么找到App的所有历史版本,以及每次改版的变更点呢?
  6. 阿里云存储_OSS对象存储
  7. android 启动另外一个activity,起动另外一个activity只能在activity里面启动吗
  8. 2021 NOI游记
  9. (组合数学笔记)递推关系小结及典型题分析
  10. 02_使用jq实现进入和离开动画
  11. 我的世界rpg服务器背包位置,我的世界:如何识别MC老玩家?看他背包中有没有这五种道具...
  12. WWDC心愿单:新版OS X或将有这些变化
  13. ubuntu15.04安装wps-office的64位版
  14. 联想g510拆键盘的简单方法_宏基4552g拆键盘怎么操作
  15. 小甲鱼老师目前所有视频教程下载地址
  16. 我这一辈子-老舍自传
  17. 《东周列国志》第四十八回 刺先克五将乱晋 召士会寿余绐秦
  18. 私募证券基金动态-12月报
  19. antdesignpro ProTable 搜索模式自定义搜索字段
  20. 软考之路(一)千里之行始于足下

热门文章

  1. 如何使用$.message
  2. java技术交流群532101200
  3. FileWriter学习
  4. 概率分布之二项分布、泊松分布
  5. 跨文件的 expected initializer before ‘xxx‘
  6. IDEA查看jks文件
  7. oracle会计科目明细请求,Oracle EBS R12财务月结基础
  8. python+opencv直方图均衡化
  9. jmeter压力测试报告
  10. 人工智能的逆向工程--反向智能研究综述