维吉亚密码是通过一张26行26列的字母表来进行加解密翻译
表的格式大致为
A B C D E F
B C D E F G
C D E F G H
D E F G H I
E F G H I J
运行结果如下:
在文本位置输入需要加密或者解密的文本,再输入密钥(密钥长度需要和文本长度一致)后点击加密或解密按钮即可输出结果,如下:
完整代码如下:
import tkinter as tk #窗口package
def jia_mi(key, text): # 加密函数定义
jia_mi_text = ""
for i in range(len(text)):
char = text[i]
if char.isalpha():
if char.isupper(): # 处理大写字母
num = (ord(char) - ord('A') + ord(key[i % len(key)]) - ord('a')) % 26
else: # 处理小写字母
num = (ord(char) - ord('a') + ord(key[i % len(key)]) - ord('a')) % 26
jia_mi_text += chr(num + ord('a'))
else:
jia_mi_text += char
return jia_mi_text
def jie_mi(key, text): # 解密函数定义
jie_mi_text = ""
for i in range(len(text)):
char = text[i]
if char.isalpha():
if char.isupper(): # 处理大写字母
num = (ord(char) - ord('A') - ord(key[i % len(key)]) + ord('a')) % 26
else: # 处理小写字母
num = (ord(char) - ord('a') - ord(key[i % len(key)]) + ord('a')) % 26
jie_mi_text += chr(num + ord('a'))
else:
jie_mi_text += char
return jie_mi_text
def input_key():
key = entry_key.get()
return key
def input_text():
text = entry_text.get()
return text
def jia_mi_button(): # 加密按钮定义
key = input_key()
text = input_text()
jia_mi_text = jia_mi(key, text)
output.set(jia_mi_text)
def jie_mi_button(): # 解密按钮定义
key = input_key()
text = input_text()
jie_mi_text = jie_mi(key, text)
output.set(jie_mi_text)
root = tk.Tk()
root.title("维吉尼亚密码加解密")
root.geometry("400x200")
label = tk.Label(root, text=" ")
label.grid(column=0, row=0, padx=10, pady=10, sticky='nsew')
#文本框
label_text = tk.Label(root, text="输入文本:")
label_text.grid(row=0, column=1)
entry_text = tk.Entry(root)
entry_text.grid(row=0, column=2)
#密钥
label_key = tk.Label(root, text="输入密钥:")
label_key.grid(row=1, column=1)
entry_key = tk.Entry(root)
entry_key.grid(row=1, column=2)
#按钮
button_jia_mi = tk.Button(root, text="加密", command=jia_mi_button)
button_jia_mi.grid(row=2, column=1)
button_jie_mi = tk.Button(root, text="解密", command=jie_mi_button)
button_jie_mi.grid(row=2, column=2)
#输出框
output = tk.StringVar()
label_output = tk.Label(root, text="输出:")
label_output.grid(row=3, column=1)
entry_output = tk.Entry(root, textvariable=output)
entry_output.grid(row=3, column=2)
#run
root.mainloop()