使用 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 模式。
  • 代码只是简单的示例,实际使用中还需要考虑密钥管理、错误处理等问题。
DES 和 AES 加密解密工具 - Python Tkinter 实现

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

免费AI点我,无需注册和登录