示例代码:

import tkinter as tk from tkinter import filedialog from tkinter import messagebox from PIL import Image, ImageTk from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad import clipboard

class ImageEncryptor: def init(self, master): self.master = master self.master.title("Image Encryptor") self.master.geometry("600x600")

    # create tab control
    self.tabControl = tk.ttk.Notebook(self.master)
    self.tabControl.pack(expand=1, fill="both")

    # create tab2
    self.tab2 = tk.Frame(self.tabControl)
    self.tabControl.add(self.tab2, text="Image")

    # create widgets
    self.image_label = tk.Label(self.tab2)
    self.image_label.pack()

    self.load_button = tk.Button(self.tab2, text="Load Image", command=self.load_image)
    self.load_button.pack()

    self.generate_key_button = tk.Button(self.tab2, text="Generate Key", command=self.generate_key)
    self.generate_key_button.pack()

    self.copy_key_button = tk.Button(self.tab2, text="Copy Key", command=self.copy_key)
    self.copy_key_button.pack()

    self.key_label = tk.Label(self.tab2, text="Key:")
    self.key_label.pack()

    self.key_entry = tk.Entry(self.tab2, show="*")
    self.key_entry.pack()

    self.encrypt_button = tk.Button(self.tab2, text="Encrypt Image", command=self.encrypt_image)
    self.encrypt_button.pack()

    self.decrypt_button = tk.Button(self.tab2, text="Decrypt Image", command=self.decrypt_image)
    self.decrypt_button.pack()

    self.save_button = tk.Button(self.tab2, text="Save Image", command=self.save_image)
    self.save_button.pack()

def load_image(self):
    file_path = filedialog.askopenfilename(filetypes=[("Image Files", "*.jpg;*.jpeg;*.png;*.bmp")])
    if file_path:
        self.image = Image.open(file_path)
        self.photo = ImageTk.PhotoImage(self.image)
        self.image_label.config(image=self.photo)

def save_image(self):
    if not hasattr(self, "encrypted_image"):
        messagebox.showerror("Error", "No encrypted image to save.")
        return

    file_path = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("Image Files", "*.jpg")])
    if file_path:
        self.encrypted_image.save(file_path)

def generate_key(self):
    key = AES.new(AES.block_size).encrypt(AES.block_size * b"\x00")
    key_hex = key.hex()
    self.key_entry.delete(0, "end")
    self.key_entry.insert(0, key_hex)

def copy_key(self):
    key_hex = self.key_entry.get()
    clipboard.copy(key_hex)

def encrypt_image(self):
    if not hasattr(self, "image"):
        messagebox.showerror("Error", "No image to encrypt.")
        return

    key_hex = self.key_entry.get()
    if not key_hex:
        messagebox.showerror("Error", "Please enter a key.")
        return

    try:
        key = bytes.fromhex(key_hex)
    except ValueError:
        messagebox.showerror("Error", "Invalid key format.")
        return

    cipher = AES.new(key, AES.MODE_ECB)
    image_data = self.image.tobytes()
    encrypted_data = cipher.encrypt(pad(image_data, AES.block_size))
    self.encrypted_image = Image.frombytes(self.image.mode, self.image.size, encrypted_data)
    self.encrypted_photo = ImageTk.PhotoImage(self.encrypted_image)
    self.image_label.config(image=self.encrypted_photo)

def decrypt_image(self):
    if not hasattr(self, "encrypted_image"):
        messagebox.showerror("Error", "No encrypted image to decrypt.")
        return

    key_hex = self.key_entry.get()
    if not key_hex:
        messagebox.showerror("Error", "Please enter a key.")
        return

    try:
        key = bytes.fromhex(key_hex)
    except ValueError:
        messagebox.showerror("Error", "Invalid key format.")
        return

    cipher = AES.new(key, AES.MODE_ECB)
    encrypted_data = self.encrypted_image.tobytes()
    decrypted_data = unpad(cipher.decrypt(encrypted_data), AES.block_size)
    self.decrypted_image = Image.frombytes(self.encrypted_image.mode, self.encrypted_image.size, decrypted_data)
    self.decrypted_photo = ImageTk.PhotoImage(self.decrypted_image)
    self.image_label.config(image=self.decrypted_photo)

if name == "main": root = tk.Tk() app = ImageEncryptor(root) root.mainloop(

使用Python的tkinter库实现了一个简单的图像加密和解密功能。具体功能如下:创建一个选项卡tab2用于显示图像。定义了一个函数load_image用于加载图像并使用文件对话框让用户选择要加载的图像文件。定义了一个函数save_image用于保存图像将加密后的图像保存为jpg格式文件。定义了一个函数generate_key用于生成随机密钥并显示在密钥输入框中。定义了一个函数copy_key用

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

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