广告位联系
返回顶部
分享到

python实现凯撒密码、凯撒加解密算法的介绍

python 来源:互联网搜集 作者:秩名 发布时间:2020-06-11 15:12:52 人浏览
摘要

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

凯撒密码的原理:计算并输出偏移量为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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/c_programj/article/details/106668665
相关文章
  • Python Django教程之实现新闻应用程序

    Python Django教程之实现新闻应用程序
    Django是一个用Python编写的高级框架,它允许我们创建服务器端Web应用程序。在本文中,我们将了解如何使用Django创建新闻应用程序。 我们将
  • 书写Python代码的一种更优雅方式(推荐!)

    书写Python代码的一种更优雅方式(推荐!)
    一些比较熟悉pandas的读者朋友应该经常会使用query()、eval()、pipe()、assign()等pandas的常用方法,书写可读性很高的「链式」数据分析处理代码
  • Python灰度变换中伽马变换分析实现

    Python灰度变换中伽马变换分析实现
    1. 介绍 伽马变换主要目的是对比度拉伸,将图像灰度较低的部分进行修正 伽马变换针对的是对单个像素点的变换,也就是点对点的映射 形
  • 使用OpenCV实现迷宫解密的全过程

    使用OpenCV实现迷宫解密的全过程
    一、你能自己走出迷宫吗? 如下图所示,可以看到是一张较为复杂的迷宫图,相信也有人尝试过自己一点一点的找出口,但我们肉眼来解谜
  • Python中的数据精度问题的介绍

    Python中的数据精度问题的介绍
    一、python运算时精度问题 1.运行时精度问题 在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和
  • Python随机值生成的常用方法

    Python随机值生成的常用方法
    一、随机整数 1.包含上下限:[a, b] 1 2 3 4 import random #1、随机整数:包含上下限:[a, b] for i in range(10): print(random.randint(0,5),end= | ) 查看运行结
  • Python字典高级用法深入分析讲解
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python浅析多态与鸭子类型使用实例
    什么多态:同一事物有多种形态 为何要有多态=》多态会带来什么样的特性,多态性 多态性指的是可以在不考虑对象具体类型的情况下而直
  • Python字典高级用法深入分析介绍
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本

    Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本
    我们的目标是秒杀淘宝或京东等的订单,这里面有几个关键点,首先需要登录淘宝或京东,其次你需要准备好订单,最后要在指定时间快速
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计