Python DES和AES加密解密工具 - 使用hashlib模块实现密钥扩展
Python DES和AES加密解密工具 - 使用hashlib模块实现密钥扩展
本工具使用Python编写,实现了简单的DES和AES加密解密功能。为了解决Crypto模块在Python3.7版本中遇到的'SHA256_init'函数缺失问题,我们将使用hashlib模块代替Crypto.Hash模块中的SHA256。
代码如下:
from tkinter import *
from Crypto.Cipher import DES, AES
import hashlib # 使用hashlib模块
# 主窗口
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 = hashlib.sha256(key.encode()) # 使用hashlib.sha256
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) * '\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和hashlib库。
- 运行代码,将密钥和要加密/解密的文本分别输入到相应的输入框中。
- 点击相应的按钮进行加密或解密操作。
注意:
- 密钥长度应为16位(DES)或32位(AES)。
- 加密后的密文以字节数组形式显示,可以通过
bytes.hex()方法转换为十六进制字符串。 - 使用hashlib模块可以避免在Python 3.7版本中遇到的错误。
希望本工具对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/osgV 著作权归作者所有。请勿转载和采集!