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文件和目录操作方法大全(含实例)
Mar 12 Python
Python算法之栈(stack)的实现
Aug 18 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
Mar 23 Python
Python使用MONGODB入门实例
May 11 Python
Python中operator模块的操作符使用示例总结
Jun 28 Python
Python中执行存储过程及获取存储过程返回值的方法
Oct 07 Python
python批量替换多文件字符串问题详解
Apr 22 Python
Python使用pydub库对mp3与wav格式进行互转的方法
Jan 10 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
基于Tensorflow高阶读写教程
Feb 10 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
打造计数器DIY三步曲(上)
2006/10/09 PHP
PHP教程 预定义变量
2009/10/23 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
AngularJS基础 ng-include 指令示例讲解
2016/08/01 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
Vue动态组件实例解析
2017/08/20 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
Python探索之创建二叉树
2017/10/25 Python
使用python画个小猪佩奇的示例代码
2018/06/06 Python
Django中的forms组件实例详解
2018/11/08 Python
Python爬虫:url中带字典列表参数的编码转换方法
2019/08/21 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
无故旷工检讨书
2014/01/26 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang