python语言编程实现凯撒密码、凯撒加解密算法

凯撒密码的原理:计算并输出偏移量为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凯撒密码 凯撒加解密算法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 利用python实现凯撒密码加解密功能

    凯撒密码介绍 凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全.他的原理很简单,说到底就是字母于字母之间的替换. 实验目的 应用Python程序设计语言的相关知识,理解并实现凯撒密码加解密过程. 实验内容 任务1:运行import this, 观察代码运行结果:查看this.py源文件(可以在Python安装目录下的Lib文件夹下找到),分析它的原理. 任务2:实现凯撒密码加解密过程. 实验环境 Pyt

  • Python实现的凯撒密码算法示例

    本文实例讲述了Python实现的凯撒密码算法.分享给大家供大家参考,具体如下: 一 介绍 凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全.他的原理很简单,说到底就是字母于字母之间的替换.下面让我们看一个简单的例子:"baidu"用凯撒密码法加密后字符串变为"edlgx",它的原理是什么呢?把"baidu"中的每一个字母按字母表顺序向后移3位,所得的结果

  • python语言编程实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin************# message1=message.upper() #把明文字母变成大写 message1=list(message1) #将明文字符串转换成列表 list1=[] for i in range(len(message1)): if message1[i]==' ': lis

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

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin************# message1=message.upper() #把明文字母变成大写 message1=list(message1) #将明文字符串转换成列表 list1=[] for i in range(len(message1)): if message1[i]==' ': lis

  • Python内置方法实现字符串的秘钥加解密(推荐)

    在实际编程开发中,我们会使用到各类的加密算法来对数据和信息进行加密.比如密码中比较常见的MD5加密,以及AES加密等等. 对于密码认证来说,MD5加密是比较适合的,因为其不需要接触到明文的数据,只需要比对MD5加密后的哈希值就能判断数据是否一致:而对于一些在加密后进行解密的数据而言,AES则更加的常用. 在Python中实现AES算法需要借助的第三方库Crypto,其在各个操作系统上的安装方法有些许复杂,所以对于简单的使用有点杀鸡用牛刀的意思.在Mrdoc的开发过程中,我们就遇到了这样的问题.一

  • Python密码学Caesar Cipher凯撒密码算法教程

    目录 凯撒密码算法 输出 说明 凯撒密码算法的黑客攻击 在最后一章中,我们处理了反向密码.本章详细讨论了凯撒密码. 凯撒密码算法 凯撒密码的算法具有以下特征; Caesar Cipher Technique是一种简单易用的加密技术方法. 这是一种简单的替换密码类型. 每个纯文本字母都被一个字母替换,字母的位数固定不变./p> 下图描绘了Caesar密码算法实现的工作原理 : Caesar密码算法的程序实现如下 : def encrypt(text,s): result = ""

  • 一文详解凯撒密码的原理及Python实现

    目录 一.什么是恺撒密码 二.程序运行环境 三.恺撒密码:加密 3.1 恺撒密码加密实例程序 3.2 恺撒密码加密实例程序运行结果 四.恺撒密码:解密 4.1 恺撒密码解密实例程序 4.2 恺撒密码解密实例程序运行结果 五.完整程序 六.总结 一.什么是恺撒密码 恺撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符: 原文:A B C D E F G H I J K L M N O P Q R S T U V W

  • python实现AES算法及AES-CFB8加解密源码

    目录 Python实现AES算法 生成轮密钥 加密 解密 完整代码如下 测试 测试程序 Python实现AES-CFB8加解密 Python实现AES算法 密码学课程老师留的作业,我觉得用python实现更简单,就用python写了一个加解密的程序.程序分成三个部分,一个部分是生成轮密钥,一个加密,一个是解密. 生成轮密钥 这个部分要看是不是四的倍数,非四的倍数是简单的,直接异或就可以了.如果是4的倍数,这时就需要执行字节代替和异或运算. for i in range(4):#把16进制转成十进

  • Python编程实现凯撒密码加密示例

    目录 一.什么是凯撒密码 二.python实现凯撒加密 一.什么是凯撒密码 "在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文.例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推.这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系." 关于凯撒密码的详细

  • python 密码学示例——凯撒密码的实现

    凯撒密码 是密码学中的一种简单的 替换加密 技术.明文中的所有字符都会替换为其按照字母表顺序向左(或向右)偏移一定量后得到的新字母,作为加密后密文. 如当偏移量为 3 时,明文中所有的字母 A 将被替换成字母 D,B 替换成 E,以此类推. 若收到密文的同时已知加密时使用的偏移量,就可以快速地通过逆运算获取到最初的明文. 下面两张图展示了当偏移量为 8 时明文字母与密文字母的对应关系(图一即凯撒密码轮盘,外层为明文,内层为密文,可旋转以改变偏移量)以及实际的加密过程(图二): PS:对一段明文消

随机推荐