1.凯撒密码简介
公元前100多年凯撒发明的一种密码,简单来说是平移密码,也就是将字母位置向后移动一定位数。
如原文是ABCXYZ,密钥为3,加密后就是DEFABC。
以密钥的数字向后平移了三位,如果密钥是5就是平移五位。
解密就是把加密的文字进行还原。
2.对凯撒密码进行分析
我们通过对题目的分析可以发现,加密与解密就是对字母的ASCII值移动n位后得到的字母,当我们对字母加密后解密就是加密的反过程。
总体来说就是对ASCII的处理。
3.代码
import tkinter as tk
from tkinter import messagebox
class jiami:
def __init__(self):
self.root = tk.Tk()
self.root.title('加密')
self.root.geometry('220x80+600+200')
self.jiemian()
self.root.mainloop()
def jiemian(self):
self.lable01 = tk.Label(self.root, text='请输入明文:')
self.lable01.grid(row=0, column=0)
self.v1 = tk.StringVar()
self.entry01 = tk.Entry(self.root, textvariable=self.v1)
self.entry01.grid(row=0, column=1, sticky=tk.NSEW)
self.lable02 = tk.Label(self.root, text='请输入密钥:')
self.lable02.grid(row=1, column=0)
self.v2 = tk.StringVar()
self.entry02 = tk.Entry(self.root, textvariable=self.v2)
self.entry02.grid(row=1, column=1, sticky=tk.NSEW)
self.btn01 = tk.Button(self.root, text="加密",width=16, command=self.yunsuan)
self.btn01.grid(row=2, column=1)
def yunsuan(self):
self.a = self.entry01.get()
print("明文:" + self.a)
self.b = self.entry02.get()
print("密钥:" + self.b)
self.c = self.jiami1()
print("暗文:" + self.c)
self.root.destroy()
messagebox.showinfo("暗文", "明文:" + self.a + "\n密钥:" + self.b + "\n暗文:" + self.c)
def jiami1(self):
a = self.a
n = int(self.b)
n = n % 26
b = ""
for i in a:
if i == ' ':
i = ' '
else:
if 'a' <= i <= 'z':
s = chr((ord(i) - ord('a') + n) % 26 + ord('a'))
b += s
if 'A' <= i <= 'Z':
s = chr((ord(i) - ord('A') + n) % 26 + ord('A'))
b += s
return b
class jiemi:
def __init__(self):
self.root = tk.Tk()
self.root.title('解密')
self.root.geometry('220x80+600+200')
self.jiemian()
self.root.mainloop()
def jiemian(self):
self.lable01 = tk.Label(self.root, text='请输入暗文:')
self.lable01.grid(row=0, column=0)
self.v1 = tk.StringVar()
self.entry01 = tk.Entry(self.root, textvariable=self.v1)
self.entry01.grid(row=0, column=1, sticky=tk.NSEW)
self.lable02 = tk.Label(self.root, text='请输入密钥:')
self.lable02.grid(row=1, column=0)
self.v2 = tk.StringVar()
self.entry02 = tk.Entry(self.root, textvariable=self.v2)
self.entry02.grid(row=1, column=1, sticky=tk.NSEW)
self.btn01 = tk.Button(self.root, text="解密",width=16, command=self.yunsuan)
self.btn01.grid(row=2, column=1)
def yunsuan(self):
self.a = self.entry01.get()
print("暗文:" + self.a)
self.b = self.entry02.get()
print("密钥:" + self.b)
self.c = self.jiemi1()
print("明文:" + self.c)
self.root.destroy()
messagebox.showinfo("暗文", "暗文:" + self.a + "\n密钥:" + self.b + "\n明文:" + self.c)
def jiemi1(self):
a = self.a
n = int(self.b)
n = n % 26
b = ""
for i in a:
if i == ' ':
i = ' '
else:
if 'a' <= i <= 'z':
s = chr((ord(i) - ord('a') - n) % 26 + ord('a'))
b += s
if 'A' <= i <= 'Z':
s = chr((ord(i) - ord('A') - n) % 26 + ord('A'))
b += s
return b
class caidan:
def __init__(self):
self.root = tk.Tk()
self.root.title('菜单')
self.root.geometry('245x145+600+200')
self.mulu()
self.root.mainloop()
def mulu(self):
self.but1 = tk.Button(self.root, text=" 1.加 密 ",height=2, width=16, command=jiami)
self.but1.grid(row=1, column=0,columnspan=2)
self.but2 = tk.Button(self.root, text=" 2.解 密 ",height=2, width=16, command=jiemi)
self.but2.grid(row=2, column=1,columnspan=2)
self.but3 = tk.Button(self.root, text=" 3.退 出 ",height=2, width=16, command=self.root.destroy)
self.but3.grid(row=3, column=2,columnspan=2)
if __name__ == "__main__":
caidan()
4.对代码的分析
1.代码结构
加密类
->
主函数 -> 菜单类
->
解密类
主函数调用菜单类,显示菜单窗口,在菜单类中,加密按钮调用加密类,显示加密页面,解密按钮调用解密类,显示解密页面
2.caidan类
有三个按钮构成,分别是加密,解密,退出。
加密解密按钮分别调用加密解密类。
退出按钮关闭页面结束程序
3.jiami类
def jiemian(self)方法中由两个文本框,两个输入框与一个加密按钮构成,输入框分别接收明文与密钥,加密按钮调用yunsuan方法对明文进行加密,在jiami1方法中对明文进行加密,并返回暗文,在运算方法中接收暗文并进行结果的显示。
4.jiemi类
def jiemian(self)方法中由两个文本框,两个输入框与一个解密按钮构成,输入框分别接收暗文与密钥,解密按钮调用yunsuan方法对暗文进行解密,在jiemi1方法中对暗文进行解密,并返回明文,在运算方法中接收明文并进行结果的显示。
5.结果显示
按菜单页面加密解密按钮显示的界面
按加密解密页面加密解密按钮显示的页面
控制台显示的结果