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写的服务监控程序实例
Jan 31 Python
Python and、or以及and-or语法总结
Apr 14 Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
python下10个简单实例代码
Nov 15 Python
Python requests发送post请求的一些疑点
May 20 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
python实现windows倒计时锁屏功能
Jul 30 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 Python
Python爬虫之Selenium设置元素等待的方法
Dec 04 Python
python爬虫破解字体加密案例详解
Mar 02 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 Python
浅谈Python 中的复数问题
May 19 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
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
js查找父节点的简单方法
2008/06/28 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
2013/08/11 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
javascript实现手动点赞效果
2019/04/09 Javascript
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
解决django FileFIELD的编码问题
2020/03/30 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
瑜伽国际:Yoga International
2018/04/18 全球购物
轻松制作精彩视频:Animoto
2018/09/19 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
中学生自我鉴定
2014/02/04 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
2015年教师节主持词
2015/07/03 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
Redis 异步机制
2022/05/15 Redis
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL