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


Posted in Python onJune 11, 2020

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

def casar(message):
# *************begin************#
 message1=message.upper() #把明文字母变成大写
 message1=list(message1) #将明文字符串转换成列表
 list1=[]
 for i in range(len(message1)):
 if message1[i]==' ':
  list1.append(message1[i]) #若为空格不用移动
 elif ord(message1[i]) <= 90-3+1: #A-X右移三位
  list1.append(chr(ord(message1[i]) + 3))
  result = ''.join(list1) #列表转换成字符串
 else:
  list1.append(chr(ord(message1[i]) - (26-3))) #Y和Z回到A、B
  result = ''.join(list1)
 print(result)
# **************end*************# 
 
 
def main():
 message = input()
 casar(message)
if __name__=='__main__':
 main()

测试输入:Guet
预期输出:JXHW
测试输入:information security
预期输出:LQIRUPDWLRQ VHFXULWB

凯撒密码原理:根据输入的加解密模式和密钥对消息进行加解密。
注意:如果是加密,输出的密文是大写字母,如果是解密,按照凯撒解密后,转换为小写后,输出解密后的明文.

def casar(mode,message,key):
# *************begin************#
 if mode==1: #加密
 message1 = message.upper() # 把明文字母变成大写
 message1 = list(message1) # 将明文字符串转换成列表
 list1 = []
 for i in range(len(message1)):
  if message1[i] == ' ':
  list1.append(message1[i]) # 若为空格不用移动
  elif ord(message1[i]) <= 65 +key-1: 
  list1.append(chr(ord(message1[i]) + key)) # 右移key位
  result = ''.join(list1) # 列表转换成字符串
  else:
  list1.append(chr(ord(message1[i]) - key)) 
  result = ''.join(list1)
 print(result)
 elif mode==0: #解密
 message2 = list(message) # 将明文字符串转换成列表
 list2 = []
 for i in range(len(message2)):
  if message2[i] == ' ':
  list2.append(message2[i]) # 若为空格不用移动
  elif ord(message2[i]) <= 65+ key -1: 
  list2.append(chr(ord(message2[i]) + (26-key))) # 右移三位
  result = ''.join(list2) # 列表转换成字符串
  else:
  list2.append(chr(ord(message2[i]) - key)) 
  result = ''.join(list2)
 result = result.lower()
 print(result)

# **************end*************# 

def main():
 mode = int(input()) # 1代表加密,0代表解密
 message = input() #待加密或解密的消息
 key = int(input()) # key的范围0~25之间
 casar(mode,message,key)
if __name__=='__main__':
 main()

测试输入:
1
zhang
13
测试输出:
MUNAT
测试输入:
0
GOHUN
7
测试输出:
zhang

编写一个仿射加解密程序,范围是所有的大小写字母范围
本题需要掌握相关知识1.仿射加密算法,2.扩展的欧几里得算法。
假设X,Y,a,b是Z52整数环中的元素,a和b为密钥,X是原文,Y是密文
加密函数:Y=(aX+b)%52
获取乘法逆元
通过扩展的欧几里得算法求a的乘法逆元
加密过程
加密函数:Y=(aX+b)%52
解密过程
解密函数:X=(a的逆元)*(Y-B)%52

#仿射密码

def encrypt(k1,k2,message):
# *************begin************#
 message1 = list(message)
 list1=list(map(chr,range(ord('a'),ord('z')+1)))
 list2=list(map(chr,range(ord('A'),ord('Z')+1)))
 for i in range(len(list1)):
 list1.append(list2[i])
 y=[]
 for i in range(len(message)):
 if message1[i]==' ':
  y.append(message1[i])
 else:
  for j in range(52):
  if message1[i]==list1[j]:
   y.append(list1[(k1*j + k2) % 52])
   result = ''.join(y)
 return result
# **************end*************# 

def decrypt(k1,k2,message):
# *************begin************#
	#扩展欧几里得算法求逆元法
 # x1, x2, x3 = 1, 0, 52 
 # y1, y2, y3 = 0, 1, k1
 # while True:
 # if y3 == 0:
 #  return 'None'
 #  break
 # elif y3 == 1:
 #  a_reverse =y2 % 52
 #  break
 # else:
 #  Q = x3 // y3
 #  t1, t2, t3 = x1 - Q * y1, x2 - Q * y2, x3 - Q * y3
 #  x1, x2, x3 = y1, y2, y3
 #  y1, y2, y3 = t1, t2, t3
 
 #已知模求逆元
 for i in range(1,53):
 if k1 * i % 52 == 1:
  a_reverse = i

 message1 = list(message)
 list1=list(map(chr,range(ord('a'),ord('z')+1)))
 list2=list(map(chr,range(ord('A'),ord('Z')+1)))
 for i in range(len(list1)):
 list1.append(list2[i])
 x=[]
 for i in range(len(message1)):
 if message1[i]==' ':
  x.append(message1[i])
 else:
  for j in range(52):
  if message1[i]==list1[j]:
   x.append(list1[(a_reverse * (j-k2) )% 52])
   result = ''.join(x)
 return result
  
# **************end*************# 

def main():
 mode = int(input()) # 1代表加密,0代表解密
 message = input() #待加密或解密的消息
 key1 = int(input()) # key的范围0~51之间
 key2 = int(input()) # key的范围0~51之间
 if mode == 1:
 translated = encrypt(key1,key2,message)
 else:
 translated = decrypt(key1,key2,message)
 print(translated)

if __name__=='__main__':
 main()

测试输入:
1
zhang
7
31
预期输出:
YCFsv
测试输入:
0
gVEXGT iDIT
5
29
预期输出:
Lovely Baby

总结

到此这篇关于python语言编程实现凯撒密码、凯撒加解密算法的文章就介绍到这了,更多相关python凯撒密码 凯撒加解密算法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现bucket排序算法实例分析
May 04 Python
python简单线程和协程学习心得(分享)
Jun 14 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
Aug 30 Python
浅谈Python2获取中文文件名的编码问题
Jan 09 Python
python DataFrame 修改列的顺序实例
Apr 10 Python
python将回车作为输入内容的实例
Jun 23 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
Python通过kerberos安全认证操作kafka方式
Jun 06 Python
python的数学算法函数及公式用法
Nov 18 Python
教你怎么用PyCharm为同一服务器配置多个python解释器
May 31 Python
再谈python_tkinter弹出对话框创建
Mar 20 Python
python新手学习可变和不可变对象
Jun 11 #Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 #Python
什么是python的id函数
Jun 11 #Python
Keras:Unet网络实现多类语义分割方式
Jun 11 #Python
Pycharm中配置远程Docker运行环境的教程图解
Jun 11 #Python
Keras 快速解决OOM超内存的问题
Jun 11 #Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 #Python
You might like
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
[46:57]EG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python去掉字符串中重复字符的方法
2014/02/27 Python
python一键升级所有pip package的方法
2017/01/16 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
Python中zip()函数的解释和可视化(实例详解)
2020/02/16 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
学生周末长期请假条
2014/02/15 职场文书
历史学专业求职信
2014/06/19 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python
PL350与SW11的比较
2021/04/22 无线电