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中变量交换的例子
Aug 25 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
Python制作豆瓣图片的爬虫
Dec 28 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
Django框架设置cookies与获取cookies操作详解
May 27 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
Jun 14 Python
把django中admin后台界面的英文修改为中文显示的方法
Jul 26 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
Python2及Python3如何实现兼容切换
Sep 01 Python
python 带时区的日期格式化操作
Oct 23 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
Dec 01 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
php实现window平台的checkdnsrr函数
2015/05/27 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
vue使用showdown并实现代码区域高亮的示例代码
2019/10/17 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
python 制作本地应用搜索工具
2021/02/27 Python
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
教师的实习自我鉴定
2013/12/17 职场文书
法人委托书范本
2014/04/04 职场文书
部门年终奖分配方案
2014/05/07 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
出国签证在职证明范本
2014/11/24 职场文书
花木兰观后感
2015/06/10 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS