凯撒密码的原理:计算并输出偏移量为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实现凯撒密码、凯撒加解密算法相关推荐

  1. 利用ENGINE替换OPENSSL中的加解密算法

    一:ENGINE的目的: ENGINE是OPENSSL预留的加载第三方加密库,主要包括了动态库加载的代码和加密函数指针管理的一系列接口.如果要使用Engine(假设你已经加载上该Engine了),那么 ...

  2. 凯撒加密的python语言程序_python实现凯撒密码、凯撒加解密算法

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

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

    python实现凯撒密码.凯撒加解密算法 更多python视频教程请到菜鸟教程https://www.piaodoo.com/ 凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字 ...

  4. .Net/C# 实现: FlashFXP 地址簿中站点密码的加解密算法

    参阅 CCFer & TLFer : kanbol 的 Java 代码翻译修改而成: kanbol 说: 之前在TLF写过一个程序自动更新flashfxp的地址簿,也就是修改sites.dat ...

  5. python:实现DES和3DES加解密算法(附完整源码)

    python:实现DES和3DES加解密算法 import sys _pythonMajorVersion = sys.version_info[0]# Modes of crypting / cyp ...

  6. python中sort函数字符串_python中的sort方法使用详解

    < Python树莓派编程>--3.3 Python入门 本节书摘来自华章出版社<Python树莓派编程>一书中的第3章,第3.3节,作者:[美]沃尔弗拉姆·多纳特(Wolfr ...

  7. python中print的本质_Python基础语法全解

    一.Python简介 1. 了解Python Python是一种解释型(这意味着开发过程中没有了编译这个环节).面向对象(支持面向对象的风格或代码封装在对象的编程技术).动态数据类型的交互式(可在命令 ...

  8. python中if else语句_python 中if else 语句的作用及示例代码

    引入:if-else的作用,满足一个条件做什么,否则做什么. if-else语句语法结构 if 判断条件: 要执行的代码 else: 要执行的代码 判断条件:一般为关系表达式或bool类型的值 执行过 ...

  9. python中print的用法_Python中print函数简单使用总结

    Python中print函数简单使用总结 print函数是Python的入门,每一个学习python的人都绕不开这个函数,下面介绍一下这个函数的用法. 打开电脑,选择python软件,下面选择pyth ...

最新文章

  1. Windows Server 2012 R2 文件服务器配置共享
  2. [文摘20090224]天干和地支
  3. CHIL-SQL-PRIMARY KEY 约束
  4. 飚王硬盘盒怎么样_ORICO M.2固态移动硬盘盒众测分享:移动存储也高速
  5. 解决 Angular 官网下载的 library Schematics build 出错的办法
  6. ffbe攻略站_最终幻想勇气启示录ffbe兵员强化攻略
  7. java netbeans桌面_netbeans创建桌面应用程序教程
  8. (92)低速接口UART、IIC、SPI介绍,面试必问(十六)(第19天)
  9. python中read() readline()以及readlines()用法
  10. 导航一体机端口测试软件,车载GPS检测端口和屏幕分辨率的软件:PADTOOL
  11. 镜头像差之二——色差
  12. P2168 [NOI2015]荷马史诗
  13. 八佰(800)低代码精耕行业细分领域数字化转型
  14. 多目标优化算法(四)NSGA3(NSGAIII)论文复现以及matlab和python的代码
  15. Hive考试练习题前75分答案
  16. Dubbo - Dubbo的SPI机制
  17. 手机图片怎么生成二维码?手机如何创建二维码?
  18. 限流算法-固定时间窗口
  19. 利用python播放本地视频文件
  20. Unity用Gizmos画线和图

热门文章

  1. 损失函数与代价函数区别
  2. 添加鼠标右键菜单项(EditPlus为例)
  3. jquery 引号问题
  4. DevExpress 13.2.6源码、安装包、汉化包下载和教程
  5. 动态生成节点与删除节点
  6. JAVA基础之变量(数据类型及其转换)
  7. WSL2支持GPU使用docker
  8. Ubuntu音频开发audacity(十)
  9. git commit --amend两种用法
  10. interface_cast做什么的?