import base64
from Crypto.Cipher import AES # Crypto.Cipher是Python Cryptography Toolkit(pycryptodome)库中的一个模块
from Crypto.Util.Padding import pad, unpad
import tkinter as tk
from tkinter import messagebox
def encrypt_text():
plaintext = text_box.get("1.0", "end-1c")
password = password_box.get()
# 判断秘钥长度
if len(password) != 32:
messagebox.showinfo("Error", "key 必须是 32 个字节")
return
# base64 加密
encoded_plaintext = base64.b64encode(plaintext.encode()).decode()
# AES 加密
cipher = AES.new(password.encode(), AES.MODE_ECB)
encrypted_data = cipher.encrypt(pad(encoded_plaintext.encode(), AES.block_size))
# base64 加密
encoded_encrypted_data = base64.b64encode(encrypted_data).decode()
output_box.delete("1.0", tk.END)
output_box.insert(tk.END, encoded_encrypted_data)
def decrypt_text():
encoded_encrypted_data = text_box.get("1.0", "end-1c")
password = password_box.get()
# 判断秘钥长度
if len(password) != 32:
messagebox.showinfo("Error", "key 必须是 32 个字节")
return
# BASE64 解密
encrypted_data = base64.b64decode(encoded_encrypted_data)
# AES 解密
cipher = AES.new(password.encode(), AES.MODE_ECB)
decrypted_data = unpad(cipher.decrypt(encrypted_data), AES.block_size)
# base64 解密
decoded_decrypted_data = base64.b64decode(decrypted_data).decode()
output_box.delete("1.0", tk.END)
output_box.insert(tk.END, decoded_decrypted_data)
# 创建主窗口
window = tk.Tk()
window.title("文本加密解密器")
window.geometry("400x300")
# 创建消息框
text_label = tk.Label(window, text="文本:")
text_label.pack()
text_box = tk.Text(window, height=5)
text_box.pack()
# 创建密码框
password_label = tk.Label(window, text="key:")
password_label.pack()
password_box = tk.Entry(window, show="*")
password_box.pack()
# 创建输出框
output_label = tk.Label(window, text="输出:")
output_label.pack()
output_box = tk.Text(window, height=5)
output_box.pack()
# 创建加密解密按钮
encrypt_button = tk.Button(window, text="加密", command=encrypt_text)
encrypt_button.pack(side=tk.LEFT, padx=10)
decrypt_button = tk.Button(window, text="解密", command=decrypt_text)
decrypt_button.pack(side=tk.LEFT)
# 开启主循环
window.mainloop()