Python Tkinter 数据安全界面:仿射密码与栅栏密码实现
该代码使用 Python Tkinter 库构建了一个简单的登录界面和数据安全界面,包含了仿射密码和栅栏密码的加密解密功能。
登录界面
import tkinter as tk
def login():
global root
username = entry_username.get()
password = entry_password.get()
if username == 'admin' and password == '123456':
root = tk.Tk()
else:
label_result.config(text='用户名或密码错误')
root1 = tk.Tk()
root1.title('登录界面')
root1.geometry('300x200') # 设置窗口大小
label_username = tk.Label(root1, text='用户名:')
label_username.grid(row=0, column=0)
entry_username = tk.Entry(root1)
entry_username.grid(row=0, column=1)
label_password = tk.Label(root1, text='密码:')
label_password.grid(row=1, column=0)
entry_password = tk.Entry(root1, show='*')
entry_password.grid(row=1, column=1)
button_login = tk.Button(root1, text='登录', command=login)
button_login.grid(row=2, column=0)
label_result = tk.Label(root1, text='')
label_result.grid(row=2, column=1)
root1.mainloop()
数据安全界面
root.title('数据安全') # 给窗口命名
root.geometry('3000x2000') # 设置窗口大小
lb1 = tk.Label(root, text='加密解密') # root 是主体,text 是内容
lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1) # 设置位置
aaa = tk.Entry(root)
aaa.place(relx=0.3, rely=0.2, relwidth=0.8, relheight=0.1)
bbb = tk.Entry(root)
bbb.place(relx=0.3, rely=0.3, relwidth=0.8, relheight=0.1)
ccc = tk.Entry(root)
ccc.place(relx=0.3, rely=0.4, relwidth=0.7, relheight=0.1)
btn1 = tk.Button(root, text='仿射密码', command=lambda: fsjm())
btn1.place(relx=0, rely=0.2, relwidth=0.1, relheight=0.1)
btn2 = tk.Button(root, text='栅栏密码', command=lambda: zljm())
btn2.place(relx=0, rely=0.3, relwidth=0.1, relheight=0.1)
btn3 = tk.Button(root, text='DES算法')
btn3.place(relx=0, rely=0.4, relwidth=0.1, relheight=0.1)
btn4 = tk.Button(root, text='加密', command=lambda: jiami())
btn4.place(relx=0.1, rely=0.2, relwidth=0.1, relheight=0.1)
btn5 = tk.Button(root, text='解密', command=lambda: jiemi())
btn5.place(relx=0.2, rely=0.2, relwidth=0.1, relheight=0.1)
btn6 = tk.Button(root, text='加密', command=lambda: jiami1())
btn6.place(relx=0.1, rely=0.3, relwidth=0.1, relheight=0.1)
btn7 = tk.Button(root, text='解密', command=lambda: jiemi1())
btn7.place(relx=0.2, rely=0.3, relwidth=0.1, relheight=0.1)
btn8 = tk.Button(root, text='加密')
btn8.place(relx=0.1, rely=0.4, relwidth=0.1, relheight=0.1)
btn9 = tk.Button(root, text='解密')
btn9.place(relx=0.2, rely=0.4, relwidth=0.1, relheight=0.1)
btn10 = tk.Button(root, text='退出', command=root.destroy)
btn10.place(relx=0.9, rely=0.2, relwidth=0.1, relheight=0.3)
def fsjm(text, key, mode):
for i in key:
a = int(key[0])
b = int(key[1])
if mode == 'encrypt':
return ''.join([chr(((a * (ord(t) - 65) + b) % 26) + 65) if t.isalpha() else t for t in text.upper()])
elif mode == 'decrypt':
a_inv = pow(a, -1, 26)
return ''.join([chr(((a_inv * (ord(t) - 65 - b)) % 26) + 65) if t.isalpha() else t for t in text.upper()])
def jiami():
mingwen = aaa.get()
key = bbb.get().split(',')
miwen = fsjm(mingwen, key, 'encrypt')
ccc.delete(0, tk.END)
ccc.insert(0, miwen)
def jiemi():
miwen = ccc.get()
key = bbb.get().split(',')
new_mingwen = fsjm(miwen, key, 'decrypt')
aaa.delete(0, tk.END)
aaa.insert(0, new_mingwen)
def zljm(text, key, mode):
global miwen1
key1 = int(key)
if mode == 'encrypt':
miwen1 = ''
n = 0
while n < key1:
m = 0
while m < len(text) / key1:
if (m * key1 + n) < len(text):
miwen1 = miwen1 + text[int(m * key1 + n)]
m += 1
else:
break
n += 1
miwen1 = miwen1.upper()
return miwen1
elif mode == 'decrypt':
new_mingwen1 = ''
n = 0
key1 = int(key)
key2 = len(miwen1) / key1
while n < key2:
m = 0
while m < key1:
if (m * key2 + n) < len(miwen1):
new_mingwen1 = new_mingwen1 + miwen1[int(m * key2 + n)]
m += 1
else:
break
n += 1
return new_mingwen1
def jiami1():
mingwen = aaa.get()
key = bbb.get()
miwen = zljm(mingwen, key, 'encrypt')
ccc.delete(0, tk.END)
ccc.insert(0, miwen)
def jiemi1():
miwen = ccc.get()
key = bbb.get()
new_mingwen = zljm(miwen, key, 'decrypt')
aaa.delete(0, tk.END)
aaa.insert(0, new_mingwen)
root.mainloop()
代码说明
- 登录成功后,会创建一个新的
root窗口,用于展示数据安全界面。 - 数据安全界面包含了明文输入框 (
aaa)、密钥输入框 (bbb)、密文输出框 (ccc) 以及相应的加密、解密按钮。 - 仿射密码的密钥为两个数字,用逗号分隔,例如
5,3。 - 栅栏密码的密钥为一个数字,表示栅栏的列数。
- DES 算法部分代码未实现,需要自行补充。
注意: 为了安全起见,实际应用中应该使用更强大的加密算法,例如 AES。
代码运行效果

问题:
登录成功的 root 和加密解密用的 root 不是同一个。登录成功后会创建一个新的 root 窗口,而加密解密用的是之前定义的 root 窗口。
解决方法:
- 在登录成功后,使用
root1.destroy()销毁之前的登录窗口。 - 将加密解密的代码放在
login()函数中,并在登录成功后执行。
优化后的代码:
import tkinter as tk
def login():
global root
username = entry_username.get()
password = entry_password.get()
if username == 'admin' and password == '123456':
root1.destroy() # 销毁登录窗口
root = tk.Tk()
root.title('数据安全') # 给窗口命名
root.geometry('3000x2000') # 设置窗口大小
# ... 数据安全界面代码 ...
root.mainloop()
else:
label_result.config(text='用户名或密码错误')
root1 = tk.Tk()
root1.title('登录界面')
root1.geometry('300x200') # 设置窗口大小
# ... 登录界面代码 ...
root1.mainloop()
总结:
这个代码示例演示了如何使用 Python Tkinter 库构建一个简单的数据安全界面,并实现了仿射密码和栅栏密码的加密解密功能。在实际应用中,需要注意使用更强大的加密算法和安全策略。
代码说明
- 登录界面:使用
Tkinter库创建了一个登录窗口,包含用户名、密码输入框以及登录按钮。 - 数据安全界面:创建了一个新的窗口,包含明文、密文输入框、密钥输入框以及加密、解密按钮。
- 仿射密码:实现了一个简单的仿射密码加密解密算法。
- 栅栏密码:实现了一个简单的栅栏密码加密解密算法。
- 事件处理:使用
command属性绑定按钮点击事件,并在事件处理函数中调用相应的加密解密算法。
代码优化建议
- 使用更强大的加密算法:仿射密码和栅栏密码比较简单,容易破解,建议使用更安全的加密算法,例如 AES 或 RSA。
- 增加密码强度验证:在登录界面增加密码强度验证功能,以提高安全性。
- 使用更好的用户界面:可以使用
Tkinter库提供的更多组件,例如Listbox或Treeview,来构建更加完善的用户界面。 - 添加错误处理:添加错误处理机制,例如对输入的密钥或明文进行验证,避免程序异常。
- 考虑使用第三方库:可以使用一些专门的加密库,例如
cryptography库,来简化加密解密操作。
代码运行效果

问题:
登录成功的 root 和加密解密用的 root 不是同一个。登录成功后会创建一个新的 root 窗口,而加密解密用的是之前定义的 root 窗口。
解决方法:
- 在登录成功后,使用
root1.destroy()销毁之前的登录窗口。 - 将加密解密的代码放在
login()函数中,并在登录成功后执行。
优化后的代码:
import tkinter as tk
def login():
global root
username = entry_username.get()
password = entry_password.get()
if username == 'admin' and password == '123456':
root1.destroy() # 销毁登录窗口
root = tk.Tk()
root.title('数据安全') # 给窗口命名
root.geometry('3000x2000') # 设置窗口大小
# ... 数据安全界面代码 ...
root.mainloop()
else:
label_result.config(text='用户名或密码错误')
root1 = tk.Tk()
root1.title('登录界面')
root1.geometry('300x200') # 设置窗口大小
# ... 登录界面代码 ...
root1.mainloop()
总结:
这个代码示例演示了如何使用 Python Tkinter 库构建一个简单的数据安全界面,并实现了仿射密码和栅栏密码的加密解密功能。在实际应用中,需要注意使用更强大的加密算法和安全策略。
代码说明
- 登录界面:使用
Tkinter库创建了一个登录窗口,包含用户名、密码输入框以及登录按钮。 - 数据安全界面:创建了一个新的窗口,包含明文、密文输入框、密钥输入框以及加密、解密按钮。
- 仿射密码:实现了一个简单的仿射密码加密解密算法。
- 栅栏密码:实现了一个简单的栅栏密码加密解密算法。
- 事件处理:使用
command属性绑定按钮点击事件,并在事件处理函数中调用相应的加密解密算法。
代码优化建议
- 使用更强大的加密算法:仿射密码和栅栏密码比较简单,容易破解,建议使用更安全的加密算法,例如 AES 或 RSA。
- 增加密码强度验证:在登录界面增加密码强度验证功能,以提高安全性。
- 使用更好的用户界面:可以使用
Tkinter库提供的更多组件,例如Listbox或Treeview,来构建更加完善的用户界面。 - 添加错误处理:添加错误处理机制,例如对输入的密钥或明文进行验证,避免程序异常。
- 考虑使用第三方库:可以使用一些专门的加密库,例如
cryptography库,来简化加密解密操作。
代码运行效果

原文地址: https://www.cveoy.top/t/topic/oAKR 著作权归作者所有。请勿转载和采集!