实验报告内容基本要求及参考格式

  • 实验目的

应用Python程序设计语言的相关知识,理解并实现凯撒密码加解密过程。

  • 实验所用仪器(或实验环境)

Python3.6

  • 实验基本原理及步骤(或方案设计及理论计算)

实验原理:

1:观察import this的运行结果,分析原理

this.py文件是一段关于凯撒密码左移13位的解密代码,执行import this可以得到它的明文,即Tim Peters作于1999年的python之禅。

https://www.playrobot.com/robotpress/archives/5956

凯撒密码

凯撒密码

2:实现凯撒密码加解密过程。

凯撒密码,又称移位密码

凯撒密码

**可采用频率分析或者单词分词

实验步骤:

2:针对2实验,有两种建立不同字典对应关系的方法。

方法一:我们可以套用this.py的解密,实现凯撒密码加解密过程。

字典的建立:建立字母之间的移位关系的字典。ASCII码65(A)-90(Z)和97(a)-122(z)分别有各自对应的关系。大写字母对应大写字母,小写字母对应小写字母,建立移位的字典关系。

例:this.py中的字典

凯撒密码

方法二:字典的建立:大小写字母混合建立字典对应关系

例:假设**为13,解密的情况下的字典

凯撒密码

 

随后,根据建立的字典对应关系,我们可以利用dict.get()的方法,直接获取明文或密文所对应的密文或明文。如果不是字母,则返回该默认值,即它本身。再利用str.join()函数将单个结果连接起来。

  • 实验数据记录(或仿真及软件设计)

程序及运行结果方法一

print("***********************")

print("**请选择:0-解密;1-加密**")

choose = int(input("请选择加密or解密:"))

k = int(input("请输入**k:"))

d = {}  #dict

if choose == 0:

    s = input("请输入密文C:")

    for c in (65, 97):  #A-a

        for i in range(26):

            d[chr(i+c)] = chr((i+k) % 26 + c)

 

    print("".join([d.get(c, c) for c in s]))

else:

    s = input("请输入明文:")

    for c in (65, 97):  #A-a

        for i in range(26):

            d[chr(i+c)] = chr((i-k) % 26 + c)

 

print("".join([d.get(c, c) for c in s]))

 

凯撒密码

 

程序及运行结果方法二

SumTab = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

 

print("***********************")

print("**请选择:0-解密;1-加密**")

choose = int(input("请选择加密or解密:"))

k = int(input("请输入**k"))

d2 = {}  #dict

if choose == 0:

    s = input("请输入密文C:")

    for i in range(len(SumTab)):

        d2[SumTab[i]]=SumTab[(i+k)%len(SumTab)]

 

    print("".join([d2.get(c, c) for c in s]))

else:

    s = input("请输入明文:")

    for i in range(len(SumTab)):

        d2[SumTab[i]]=SumTab[(i-k)%len(SumTab)]

 

    print("".join([d2.get(c, c) for c in s]))

 

凯撒密码

思路:

1建立字母之间的字典对应关系

2.使用dict.get()str.join()函数分别进行字母的替换和结果的连接

 

  • 实验结果分析及回答问题(或测试环境及测试结果)

觉得最神奇的大概就是dict.get()函数,以前写过凯撒类似的古典密码,当时不知道dict.get()可以如此使用,所以往往需要判断空格,换行等特殊情况,所以很麻烦。但是dict.get()就完美的解决了字母对应字母关系的替换,当遇到不是字母的特殊字符时,会默认返回它本身。

 

 

相关文章:

  • 2021-06-27
  • 2022-12-23
  • 2022-12-23
  • 2021-04-02
  • 2021-11-15
  • 2022-12-23
  • 2021-12-31
  • 2021-06-14
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-03
相关资源
相似解决方案