文章目录
- 📚实验目的
- 📚关于凯撒加密
- 🔥输入任意明文和密钥K=10,对其进行凯撒加密;
- 🔥输入密文和密钥K=10,对其进行凯撒解密。
- 🔥(暴力)破译密文
- 📚分析体会
📚实验目的
- 通过实际编程掌握凯撒密码的加密、解密与破译,加深对凯撒密码算法的认识。
- 1)输入任意明文和密钥K=10,对其进行凯撒加密;
- 2)输入密文和密钥K=10,对其进行凯撒解密。
- 3)破译如下密文:Izqzm piyzmznodhvoz tjpm kjrzm oj xcvibz tjpmnzga!
📚关于凯撒加密
实际上就是k是几,就移几位。移位加密的安全性——弱!!——暴力穷举:把25种可能都试一遍。
🔥输入任意明文和密钥K=10,对其进行凯撒加密;
- 首先通过input函数获取用户输入的明文和密钥。
- 然后通过循环遍历明文中的每个字符。
- 对于空格字符,不进行加密处理,直接保留;
- 对于小写字母,通过计算将其位移n个位置后,再转换为相应的ASCII码,也就是小写输出为小写。
- 对于其他情况,默认为大写字母,同样通过计算进行位移加密。大写输出为大写。
- 最后,将加密后的字符逐个拼接起来,并输出为密文。
a = input("请输入你想要加密的明文:")
n = int(input("请输入你的密钥:"))
b = ""
for letter in a:
if letter == " ":
temp = " "#空格不加密
elif letter.islower():# 判断是否为小写字母
temp = chr((ord(letter) - ord("a") + n) % 26 + ord("a")) # 加密后保持小写
else: # 其他情况默认为大写字母
temp = chr((ord(letter) - ord("A") + n) % 26 + ord("A")) # 加密后保持大写
b += temp#将加密后的字符逐个拼接起来
print("密文为:",b)
🔥输入密文和密钥K=10,对其进行凯撒解密。
- 首先通过input函数获取用户输入的密文和密钥。
- 然后通过循环遍历明文中的每个字符。
- 对于空格字符,不进行解密处理,直接保留;
- 对于小写字母,通过计算将其位移n个位置后,再转换为相应的ASCII码,也就是小写输出为小写。
- 对于其他情况,默认为大写字母,同样通过计算进行位移解密。大写输出为大写。
- 最后,将解密后的字符逐个拼接起来,并输出为明文。
a = input("请输入你想要解密的密文:")
n = int(input("请输入你的密钥:"))
b = ""
for letter in a:
if letter == " ":
temp = " " # 空格不加密
elif letter.islower(): # 判断是否为小写字母
temp = chr((ord(letter) - ord("a") - n) % 26 + ord("a")) # 解密后保持小写
else: # 其他情况默认为大写字母
temp = chr((ord(letter) - ord("A") - n) % 26 + ord("A")) # 解密后保持大写
b += temp # 将解密后的字符逐个拼接起来
print("明文为:",b)
🔥(暴力)破译密文
- 首先定义了三个字符串变量total、upper和lower分别表示所有字母字符、大写字母和小写字母。
- 通过input函数获取用户输入的密文。接下来,通过循环从1到25(共25个可能的钥匙,这里默认先不考虑0,也就是不移位)遍历所有钥匙值。
- 在内层循环中,对于密文中的每个字符进行处理。
- 首先判断字符是否在字母字符total中。如果是,则判断字符是大写字母还是小写字母。
- 对于大写字母,通过字符串方法find()函数找到字符在upper中的位置,然后进行钥匙的逆向位移操作;
- 对于小写字母,通过字符串方法find()函数找到字符在lower中的位置,然后进行钥匙的逆向位移操作。处理完字符后,将解密后的字符追加到字符串b的末尾。
- 如果字符不在字母字符total中,则直接将字符追加到字符串b的末尾。
- 最终,输出每个钥匙对应的解密结果。
total = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
lower = "abcdefghijklmnopqrstuvwxyz"
a = input("请输入你要破解的密文:")
for key in range(1,26):
b = ""
for i in a:
if i in total:
if i.isupper(): #密文字母为大写
num = upper.find(i) #在字母里搜索到密文字符的位置
num = num - key
if num < 0:
num = num + len(upper)
b = b + upper[num] #将解密后字符追加到字符串末尾
elif i.islower(): #密文字母为小写
num = lower.find(i) #在字母里搜索到密文字符的位置
num = num - key
if num < 0:
num = num + len(lower)
b = b + lower[num] #将解密后字符追加到字符串末尾
else:
b = b + i #如果密文中内容不在字母里则不解密,直接追加
print('第%d把钥匙的结果是%s' %(key, b))
- 破解得:
Never underestimate your power to change yourself!
📚分析体会
凯撒加密是一种简单而易于理解的加密方法,但由于只有26个可能的位移值,因此被认为是相对较弱的加密算法。在现代密码学中,它通常被用作教学示例或简单的加密需求,而不适用于安全性要求较高的场景。
参考博客:
- Python基础编程入门实例:恺撒密码
- python 内置函数ord()和chr()函数用法详解
- python中islower()、isupper()、istitle()函数的用法详解