Python 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
#DES加密函数
def des_encrypt(key, text):
# 扩展密钥长度
key = extend_key(key)
# 创建DES对象
des = DES.new(key,DES.MODE_ECB)
# 补足8位
text += (8 - len(text) % 8) * '\x00'
# 加密
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'\x00'))
# AES 加密函数
def aes_encrypt(key, text):
# 扩展密钥长度
key = extend_key(key)
aes = AES.new(key, AES.MODE_ECB)
text += (16 - len(text) % 16) * '\x00'
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'\x00'))
root.mainloop()
解决“AttributeError: function/symbol 'SHA256_init' not found”错误
这个错误通常是因为 Crypto 库安装不完整或损坏导致的。可以尝试以下解决方案:
- 重新安装 Crypto 库: 运行
pip install pycryptodome命令重新安装 Crypto 库。 - 尝试使用其他加密库: 如果重新安装 Crypto 库仍然无法解决问题,可以尝试使用其他加密库,例如
cryptography或bcrypt库。 - 更新 Python 版本或更换操作系统: 如果以上方法都无法解决问题,可以尝试更新 Python 版本或更换操作系统。
使用说明:
- 运行代码,会弹出一个窗口。
- 在“输入密钥”框中输入密钥,在“输入要加密/解密的文本”框中输入要加密或解密的文本。
- 点击相应的按钮进行加密或解密操作。
- 密文或解密后的文本将显示在“输入要加密/解密的文本”框中。
注意:
- 密钥长度必须符合 DES 或 AES 的要求。
- 加密和解密必须使用相同的密钥。
- 请勿将此工具用于任何需要高度安全性的应用场景,因为它只提供基本的加密功能。
原文地址: https://www.cveoy.top/t/topic/osgU 著作权归作者所有。请勿转载和采集!