实际上就是k是几,就移几位。移位加密的安全性——弱!!——暴力穷举:把25种可能都试一遍。
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)
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 = "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个可能的位移值,因此被认为是相对较弱的加密算法。在现代密码学中,它通常被用作教学示例或简单的加密需求,而不适用于安全性要求较高的场景。
参考博客: