Blowfish 算法加密解密工具

本工具使用 Blowfish 算法对文件进行加密和解密,提供以下功能:

  • 加密文件: 使用 Blowfish 算法加密指定文件,并保存到新的文件。
  • 解密文件: 使用 Blowfish 算法解密指定文件,并保存到新的文件。
  • 生成随机密钥: 生成长度为 8 位的随机密钥,包含字母和数字。
  • 复制密钥: 将当前密钥复制到剪贴板。

使用方法

  1. 打开加密解密窗口。
  2. 输入文件路径 文本框中输入要加密或解密文件的路径。
  3. 输出文件路径 文本框中输入加密或解密后的文件保存路径。
  4. 密钥 文本框中输入或生成密钥。
  5. 点击 加密解密 按钮进行操作。

代码示例

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

def encrypt_file(input_file_path, output_file_path, key):
    try:
        key = key.encode('utf-8')  # 将密钥编码为字节类型
        if len(key) != 8:
            raise ValueError('Incorrect Blowfish key length')  # 如果密钥长度不为 8,则抛出异常
        
        with open(input_file_path, 'rb') as input_file:  # 打开输入文件以二进制读取模式
            with open(output_file_path, 'wb') as output_file:  # 打开输出文件以二进制写入模式
                while True:
                    chunk = input_file.read(1024)  # 每次读取 1024 字节的数据块
                    if not chunk:  # 如果已经读取完整个文件,则退出循环
                        break
                    encrypted_chunk = Blowfish_encrypt(key, chunk)
                    output_file.write(encrypted_chunk)
        return True
    except Exception as e:
        messagebox.showerror('Error', str(e))  # 弹出错误提示框显示异常信息
        return False

def decrypt_file(input_file_path, output_file_path, key):
    try:
        key = key.encode('utf-8')  # 将密钥编码为字节类型
        if len(key) != 8:
            raise ValueError('Incorrect Blowfish key length')  # 如果密钥长度不为 8,则抛出异常
        
        with open(input_file_path, 'rb') as input_file:  # 打开输入文件以二进制读取模式
            with open(output_file_path, 'wb') as output_file:  # 打开输出文件以二进制写入模式
                while True:
                    chunk = input_file.read(1024)  # 每次读取 1024 字节的数据块
                    if not chunk:  # 如果已经读取完整个文件,则退出循环
                        break
                    decrypted_chunk = Blowfish_decrypt(key, chunk)
                    output_file.write(decrypted_chunk)
        return True
    except Exception as e:
        messagebox.showerror('Error', str(e))  # 弹出错误提示框显示异常信息
        return False

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

注意:

  • 确保已安装 Crypto 库,可以使用 pip install pycryptodome 命令安装。
  • 使用此工具加密或解密文件时,请务必妥善保管密钥,否则将无法解密文件。

示例:

  1. 将要加密的文件放置在名为 input.txt 的文件中。
  2. 运行代码,并在加密解密窗口中填写以下信息:
    • 输入文件路径:input.txt
    • 输出文件路径:output.txt
    • 密钥:password123
  3. 点击 加密 按钮,加密后的文件将保存到名为 output.txt 的文件中。
  4. 点击 解密 按钮,使用相同的密钥解密文件,将解密后的文件保存到名为 decrypted.txt 的文件中。

总结

本工具使用 Blowfish 算法进行文件加密和解密,提供简单易用的界面,可用于保护敏感数据。请务必妥善保管密钥,以确保数据安全。

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

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

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