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()

使用说明:

  1. 确保已安装Crypto和hashlib库。
  2. 运行代码,将密钥和要加密/解密的文本分别输入到相应的输入框中。
  3. 点击相应的按钮进行加密或解密操作。

注意:

  • 密钥长度应为16位(DES)或32位(AES)。
  • 加密后的密文以字节数组形式显示,可以通过 bytes.hex() 方法转换为十六进制字符串。
  • 使用hashlib模块可以避免在Python 3.7版本中遇到的错误。

希望本工具对您有所帮助!

Python DES和AES加密解密工具 - 使用hashlib模块实现密钥扩展

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

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