一、凯撒加密法是什么?
加密原理非常简单,就是对字母表中的的每个字母,用它后面的第key个字母来代替。例如:
明文:meet me after the toga party
密文:PHHW PH DIWHV WKH WRJD SDUWB
其中key=13。
我们可以使每个A~Z中每个字母依次对应0~25等26个数字。
那么加密算法可以如下表达,对每个明文字母p,代替成密文字母C:C=E(key,p)= (p+key)(mod26)
则解密算法可写成:p=E(key,C)= (C-k)mod(26)
二、用Python实现加密解密算法。
直接上代码:
#凯撒密码加密解解密算法
import pyperclip #导入pyperclip模块,以便稍后调用pyperclip.copy()。用于复制文本到粘贴板
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
print('加密请输入E,解密请输入D')
mode = input()
if('E' in mode): #加密部分
print('请输入要加密的内容:\n')
massage = input()
massage = massage.upper() #把信息全部变成大写
translated = ''
print('请输入加密的密钥(0~26):')
key = input()
for symble in massage: #从第一个字母开始遍历massage,如果在letters里面则继续加密,若不在,则直接打出字符
if symble in LETTERS:
num = LETTERS.find(symble) #去该字母在LETTERS中的角标
num = num + int(key) #角标加上密钥,int()的作用第将key强行转化成整型
if num >= len(LETTERS):
num = num - len(LETTERS)
translated = translated + LETTERS[num]
else:
translated = translated + symble
print(translated)
pyperclip.copy(translated)
elif('D' in mode): #解密部分
print('请输入要解密的内容:\n')
massage = input()
massage = massage.upper() #把信息全部变成大写
translated = ''
print('请输入加密的密钥(0~26):')
key = input()
for symble in massage: #从第一个字母开始遍历massage,如果在letters里面则继续加密,若不在,则直接打出字符
if symble in LETTERS:
num = LETTERS.find(symble) #去该字母在LETTERS中的角标
num = num - int(key) #角标加上密钥,int()的作用第将key强行转化成整型
if num < 0:
num = num + len(LETTERS)
translated = translated + LETTERS[num]
else:
translated = translated + symble
print(translated)
pyperclip.copy(translated) #复制结果到剪贴板
三、暴力破译凯撒密码算法
由于凯撒密码破以后的所有结果也就只有26种,所以破译成本较低。
以下为破译代码:
#凯撒密码破译算法
import pyperclip
print('请输入需要破译的密文:')
massage = input()
massage = massage.upper()
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for key in range(len(LETTERS)): ##最懂就25个key,一个一个来
translated = ''
for symble in massage: #对于每一个key 都要输出一组明文
if symble in LETTERS:
num = LETTERS.find(symble)
num = num - key
if num < 0:
num = num + len(LETTERS)
translated = translated + LETTERS[num]
else:
translated = translated + symble
print('key #%d: %s'%(key,translated)) #输出结果 共计26个结果
运行结果会有26个,在这26组明文里面找最贴合自然文字的内容就很好分辨了吧。