Blowfish 算法加密解密工具

本工具使用 Blowfish 算法进行文件加密解密,提供密钥生成、复制功能,方便安全地保护您的文件。

功能:

  • 使用 Blowfish 算法对文件进行加密和解密
  • 生成随机密钥
  • 复制密钥到剪贴板
  • 选择输入和输出文件路径

使用说明:

  1. 选择输入文件路径
  2. 选择输出文件路径
  3. 生成或输入密钥
  4. 点击加密或解密按钮进行操作

代码示例:

import os
import random
import string
import tkinter as tk
from tkinter import filedialog, messagebox
from Crypto.Cipher import Blowfish
from Crypto.Util.Padding import pad, unpad
import pyperclip

def Blowfish_encrypt_decrypt(key, data, mode):
    # 获取块大小,并生成随机的初始向量
    bs = Blowfish.block_size
    iv = os.urandom(bs)
    # 创建 Blowfish 密码器并进行加密/解密操作
    cipher = Blowfish.new(key, mode, iv)
    data = pad(data, bs)  # 对数据进行填充
    encrypted_data = iv + cipher.encrypt(data)  # 添加初始向量,并加密数据
    return encrypted_data

def Blowfish_encrypt(key, data):
    # 使用 CBC 模式进行加密
    return Blowfish_encrypt_decrypt(key, data, Blowfish.MODE_CBC)

def Blowfish_decrypt(key, data):
    # 使用 CBC 模式进行解密
    return unpad(Blowfish_encrypt_decrypt(key, data, Blowfish.MODE_CBC))

def validate_key(key):
    # 验证密钥长度是否符合要求
    key_length = len(key.encode())
    if key_length < 8 or key_length > 56 or key_length % 8 != 0:
        raise ValueError('Invalid key length. Key must be between 8 and 56 bytes, and a multiple of 8 bytes.')
    return key.encode()

def create_new_window3():
    def on_encrypt():
        # 获取输入文件路径、输出文件路径和密钥
        input_file_path = e_input.get()
        output_file_path = e_output.get()
        key = e_key.get()
        # 检查是否填写完整
        if not input_file_path or not output_file_path or not key:
            messagebox.showwarning('Warning', '请填写完整的输入、输出路径和密钥!')
            return
        # 调用文件加密函数进行处理
        if encrypt_file(input_file_path, output_file_path, key):
            messagebox.showinfo('Success', '文件加密成功!')

    def on_decrypt():
        # 获取输入文件路径、输出文件路径和密钥
        input_file_path = e_input.get()
        output_file_path = e_output.get()
        key = e_key.get()
        # 检查是否填写完整
        if not input_file_path or not output_file_path or not key:
            messagebox.showwarning('Warning', '请填写完整的输入、输出路径和密钥!')
            return
        # 调用文件解密函数进行处理
        if decrypt_file(input_file_path, output_file_path, key):
            messagebox.showinfo('Success', '文件解密成功!')

    def generate_random_key():
        # 生成随机密钥,包括字母和数字,长度为8
        key = ''.join(random.choices(string.ascii_letters + string.digits, k=8))
        return key

    # 用于生成密钥按钮的事件处理函数
    def on_generate_key():
        # 调用生成随机密钥函数生成密钥
        key = generate_random_key()
        # 清空密钥输入框并将生成的密钥赋值给输入框
        e_key.delete(0, tk.END)
        e_key.insert(0, key)

    # 复制按钮函数
    def on_copy_key():
        # 获取密钥
        key = e_key.get()
        if key:
            # 将密钥复制到剪贴板
            pyperclip.copy(key)
            messagebox.showinfo('Copied', '密钥已复制到剪贴板!')

    def on_select_input():
        # 打开文件选择对话框,获取选择的文件路径
        file_path = filedialog.askopenfilename()
        if file_path:
            e_input.delete(0, tk.END)
            e_input.insert(0, file_path)

    def on_select_output():
        # 打开文件保存对话框,并设置默认文件扩展名为.docx
        file_path = filedialog.asksaveasfilename(defaultextension='.docx')
        if file_path:
            e_output.delete(0, tk.END)
            e_output.insert(0, file_path)

    new_window = tk.Toplevel(root_new)
    new_window.title('Blowfish 算法加密/解密窗口')
    new_window.geometry('2000x1000')

    lbl_input = tk.Label(new_window, text='输入文件路径:')
    lbl_input.pack()
    e_input = tk.Entry(new_window, width=50)
    e_input.pack()
    btn_select_input = tk.Button(new_window, text='选择文件', command=on_select_input)
    btn_select_input.pack()

    lbl_output = tk.Label(new_window, text='输出文件路径:')
    lbl_output.pack()
    e_output = tk.Entry(new_window, width=50)
    e_output.pack()
    btn_select_output = tk.Button(new_window, text='选择路径', command=on_select_output)
    btn_select_output.pack()

    lbl_key = tk.Label(new_window, text='密钥:')
    lbl_key.pack()
    e_key = tk.Entry(new_window)
    e_key.pack()
    # 创建生成密钥按钮
    generate_key_btn = tk.Button(new_window, text='生成密钥', command=on_generate_key)
    generate_key_btn.pack()
    # 复制
    copy_key_btn = tk.Button(new_window, text='复制密钥', command=on_copy_key)
    copy_key_btn.pack()

    # 创建加密和解密按钮
    btn_encrypt = tk.Button(new_window, text='加密', command=on_encrypt)
    btn_encrypt.pack()

    btn_decrypt = tk.Button(new_window, text='解密', command=on_decrypt)
    btn_decrypt.pack()

    # 缺少的 decrypt_file 函数实现
    def decrypt_file(input_file_path, output_file_path, key):
        # 验证密钥长度是否符合要求
        key = validate_key(key)
        # 读取输入文件并解密文件内容
        with open(input_file_path, 'rb') as f:
            encrypted_data = f.read()
            decrypted_data = Blowfish_decrypt(key, encrypted_data)
        # 将解密后的内容写入输出文件
        with open(output_file_path, 'wb') as f:
            f.write(decrypted_data)
        return True

    # 缺少的 encrypt_file 函数实现
    def encrypt_file(input_file_path, output_file_path, key):
        # 验证密钥长度是否符合要求
        key = validate_key(key)
        # 读取输入文件并加密文件内容
        with open(input_file_path, 'rb') as f:
            data = f.read()
            encrypted_data = Blowfish_encrypt(key, data)
        # 将加密后的内容写入输出文件
        with open(output_file_path, 'wb') as f:
            f.write(encrypted_data)
        return True

注意事项:

  • 请确保您已安装 Crypto 库。
  • 使用时请妥善保管密钥,丢失密钥将无法解密文件。

免责声明: 本工具仅供学习和研究使用,请勿用于非法用途。

Blowfish 算法加密解密工具 - 文件加密解密软件

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

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