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实现一次创建多级目录的方法
May 15 Python
Python编程入门之Hello World的三种实现方式
Nov 13 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
Python面向对象程序设计示例小结
Jan 30 Python
pandas计数 value_counts()的使用
Jun 24 Python
python enumerate内置函数用法总结
Jan 07 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
Django如何批量创建Model
Sep 01 Python
Python Charles抓包配置实现流程图解
Sep 29 Python
Python操作word文档插入图片和表格的实例演示
Oct 25 Python
Python爬虫之爬取哔哩哔哩热门视频排行榜
Apr 28 Python
解决Python中的modf()函数取小数部分不准确问题
May 28 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显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
jQuery 源码分析笔记
2011/05/25 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
sae使用smarty模板的方法
2013/12/17 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
js常见遍历操作小结
2019/06/06 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
python 统计代码行数简单实例
2017/05/04 Python
python数据处理实战(必看篇)
2017/06/11 Python
Python3生成手写体数字方法
2018/01/30 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
Django分组聚合查询实例分享
2020/04/29 Python
非常漂亮的CSS3百叶窗焦点图动画
2016/02/24 HTML / CSS
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
《中彩那天》教学反思
2014/02/22 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
如何利用Python实现n*n螺旋矩阵
2022/01/18 Python
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL