DES 和 AES 加密解密工具 - Python Tkinter 实现
使用 Python Tkinter 构建 DES 和 AES 加密解密工具
本示例使用 Python Tkinter 库构建了一个简单的 DES 和 AES 加密解密工具,用户可以输入文本和密钥,进行加密或解密操作。
from tkinter import *
from Crypto.Cipher import DES, AES
from Crypto.Hash import SHA256
# 主窗口
root = Tk()
root.title('DES 和 AES 加密解密工具')
root.geometry('2000x1000')
# 控件布局
lbl_title = Label(root, text='欢迎使用 DES 和 AES 加密解密工具', font=('Arial', 16))
lbl_title.place(x=475, y=100)
lbl_key = Label(root, text='输入密钥:', font=('Arial', 14))
lbl_key.place(x=450, y=150)
entry_key = Entry(root, show='*')
entry_key.place(x=550, y=150)
lbl_text = Label(root, text='输入要加密/解密的文本:', font=('Arial', 14))
lbl_text.place(x=375, y=200)
entry_text = Entry(root)
entry_text.place(x=600, y=200)
btn_des_encrypt = Button(root, text='DES 加密', font=('Arial', 12),
command=lambda: des_encrypt(entry_key.get(), entry_text.get()))
btn_des_encrypt.place(x=400, y=250)
btn_des_decrypt = Button(root, text='DES 解密', font=('Arial', 12),
command=lambda: des_decrypt(entry_key.get(), entry_text.get()))
btn_des_decrypt.place(x=500, y=250)
btn_aes_encrypt = Button(root, text='AES 加密', font=('Arial', 12),
command=lambda:aes_encrypt(entry_key.get(), entry_text.get()))
btn_aes_encrypt.place(x=600, y=250)
btn_aes_decrypt = Button(root, text='AES 解密', font=('Arial', 12),
command=lambda: aes_decrypt(entry_key.get(), entry_text.get()))
btn_aes_decrypt.place(x=700, y=250)
# 扩展密钥长度
def extend_key(key):
h = SHA256.new()
h.update(key.encode())
new_key = h.digest()
return new_key[:8] # 截取前 8 个字节作为密钥
# DES 加密函数
def des_encrypt(key, text):
# 扩展密钥长度
key = extend_key(key)
# 创建 DES 对象
des = DES.new(key, DES.MODE_ECB)
# 补足 8 位
text += (8 - len(text) % 8) * '\0'
# 加密
enc_text = des.encrypt(text.encode())
# 显示密文
entry_text.delete(0, END)
entry_text.insert(END, enc_text)
# DES 解密函数
def des_decrypt(key, text):
key = extend_key(key)
# 创建 DES 对象
des = DES.new(key, DES.MODE_ECB)
# 解密
dec_text = des.decrypt(text)
# 去除补足的字节
entry_text.delete(0, END)
entry_text.insert(END, dec_text.rstrip(b'\0'))
# AES 加密函数
def aes_encrypt(key, text):
# 扩展密钥长度
key = extend_key(key)
aes = AES.new(key, AES.MODE_ECB)
text += (16 - len(text) % 16) * '\0'
enc_text = aes.encrypt(text.encode())
return enc_text
# AES 解密函数
def aes_decrypt(key, text):
key = extend_key(key)
# 创建 AES 对象
aes = AES.new(key, AES.MODE_ECB)
# 解密
dec_text = aes.decrypt(text)
# 去除补足的字节
entry_text.delete(0, END)
entry_text.insert(END, dec_text.rstrip(b'\0'))
root.mainloop()
注意:
- 代码中使用了
Crypto库,你需要先安装它:pip install pycryptodome - DES 算法的密钥长度只能是 8 个字节(64 位),因此代码中使用
SHA256对输入的密钥进行哈希处理,并截取前 8 个字节作为密钥。 - AES 算法的密钥长度可以是 16、24 或 32 个字节。
- 代码中使用了 ECB 模式,这种模式安全性较低,建议使用更安全的模式,如 CBC、CFB 或 OFB 模式。
- 代码只是简单的示例,实际使用中还需要考虑密钥管理、错误处理等问题。
原文地址: https://www.cveoy.top/t/topic/osg4 著作权归作者所有。请勿转载和采集!