Python图形用户界面的文本文件加密工具

Python图形用户界面的文本文件加密工具

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x5oEvdLE-1720676762602)(https://i-blog.csdnimg.cn/direct/ddf0cd975b2d48a9a2f3b35c55e00add.png)]

设计方案

DES.py

DESAlgorithm 类负责管理密钥并提供加密和解密的功能。
在构造函数中,我们初始化了一个 8 字节的密钥。
encrypt 方法的实现如下:

  1. 首先,创建一个 DES 加密器,并指定 ECB 模式。
  2. 然后,使用 pad 函数对明文字符串进行填充,使其长度为 DES 块大小(8 字节)的整数倍。
  3. 最后,使用加密器的 encrypt 方法对填充后的明文进行加密,并返回加密后的二进制数据。
    decrypt 方法的实现如下:
  4. 首先,创建一个 DES 解密器,并指定 ECB 模式。
  5. 然后,使用解密器的 decrypt 方法对加密后的二进制数据进行解密。
  6. 最后使用 unpad 函数去除填充,并将解密后的二进制数据转换为明文字符串。

create_DES_cipher 函数用于创建 DES 加密/解密器,并接受密钥和工作模式作为输入。
pad 和 unpad 函数分别用于对数据进行填充和去除填充。
创建了一个 8 字节的密钥。
创建 DESAlgorithm 实例,并使用该实例对明文进行加密和解密。
打印出加密后的数据和解密后的数据,以验证加密和解密的正确性。

CAREASR.py

Caesar 类用来实现凯撒密码加密和解密。
在初始化函数 init 中:

  • 接受一个 miyao 参数,表示密钥(位移量)。
  • 创建了一个 biao 字符串,包含了 26 个大写字母、26 个小写字母、10 个数字以及一些常用的标点符号,这个字符串将作为字符集使用。

encrypt 方法实现了加密功能:

  1. 初始化一个空字符串 cipText 作为加密结果。
  2. 遍历输入的 Text 字符串。
  3. 对于每个字符,如果它在 biao字符集中,则查找它在 biao 中的索引 index。
  4. 计算新的索引 cipherIndex 为 (index + miyao) % len(biao)。
  5. 将 biao 中对应新索引的字符添加到 cipText 中。
  6. 最终返回加密后的字符串 cipText。

decrypt 方法实现了解密功能:

  1. 初始化一个空字符串 clearText 作为解密结果。
  2. 遍历输入的 cipText 字符串。
  3. 对于每个字符,如果它在 biao字符集中,则查找它在 biao 中的索引 index。
  4. 计算新的索引 clearIndex 为 (index - miyao) %len(biao)。
  5. 将 biao 中对应新索引的字符添加到 clearText 中。
  6. 最终返回解密后的明文字符串 clearText。

Main.py

定义 FileEncryptWindow 类:
初始化方法:
1.创建 Tk 窗口
2.设置默认算法为 None
3.调用 create_menu() 方法
4.调用 create_toolbar() 方法
5.调用 create_text_editor() 方法
6.运行 mainloop()

create_menu() 方法:
    创建菜单栏
    创建文件菜单
    添加打开、加密、解密和退出选项
create_toolbar() 方法:
    创建工具栏 Frame
    添加文件名输入框
    添加打开按钮
    添加密钥输入框
    添加算法选择下拉菜单
    添加加密按钮
    添加解密按钮
create_text_editor() 方法:
    创建文本编辑器 Text 控件
    将其设置为填充并扩展
open_file() 方法:
    打开文件对话框
    读取文件内容
    将文件内容显示在文本编辑器中
encrypt_file() 方法:
    检查是否已打开文件
    根据选择的算法执行加密操作
    将加密后的数据保存到新文件
decrypt_file() 方法:
    检查是否已打开文件
    根据选择的算法执行解密操作
    将解密后的数据保存到新文件
run() 方法:
    运行 mainloop()

如果是主程序:
创建 FileEncryptWindow 对象
调用 run() 方法

代码

from tkinter import *
from tkinter.filedialog import askopenfilename, asksaveasfilename
from tkinter.messagebox import showerror
class Caesar:
    def __init__(self, miyao):
      self.miyao = miyao
      self.biao = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 `-=~!@#$%^&*()_+,./<>?{}|[]\\;:\'\""
    def encrypt(self,Text):
        cipText = ""
        for char in Text:
            if char in self.biao:
                index = self.biao.find(char)
                cipherIndex = (index + self.miyao) % len(self.biao)
                cipText += self.biao[cipherIndex]
        return cipText
    def decrypt(self,cipText):
        clearText = ""
        for char in cipText:
            if char in self.biao:
                index = self.biao.find(char)
                clearIndex = (index - self.miyao) % len(self.biao)
                clearText += self.biao[clearIndex]
        return clearText




class FileEncryptWindow:
    def __init__(self):
        self.window = Tk()
        self.caesar = None

        self.create_menu()
        self.create_toolbar()
        self.create_text_editor()

        self.window.mainloop()

    def create_menu(self):
        menubar = Menu(self.window)
        self.window.config(menu=menubar)

        file_menu = Menu(menubar, tearoff=0)
        file_menu.add_command(label="打开", command=self.open_file)
        file_menu.add_command(label="加密", command=self.encrypt_file)
        file_menu.add_command(label="解密", command=self.decrypt_file)
        file_menu.add_separator()
        file_menu.add_command(label="退出", command=self.window.quit)
        menubar.add_cascade(label="文件", menu=file_menu)

    def create_toolbar(self):
        toolbar = Frame(self.window)
        toolbar.pack(fill=X)

        self.file_name = StringVar()
        entry_file_name = Entry(toolbar, textvariable=self.file_name)
        entry_file_name.pack(side=LEFT, padx=5, pady=5)

        btn_open = Button(toolbar, text="打开", command=self.open_file)
        btn_open.pack(side=LEFT, padx=5, pady=5)

        self.key = StringVar()
        entry_key = Entry(toolbar, textvariable=self.key)
        entry_key.pack(side=LEFT, padx=5, pady=5)
        self.key.set("3")

        btn_encrypt = Button(toolbar, text="加密", command=self.encrypt_file)
        btn_encrypt.pack(side=LEFT, padx=5, pady=5)

        btn_decrypt = Button(toolbar, text="解密", command=self.decrypt_file)
        btn_decrypt.pack(side=LEFT, padx=5, pady=5)

    def create_text_editor(self):
        self.text = Text(self.window)
        self.text.pack(fill=BOTH, expand=True)

    def open_file(self):
        in_file_name = askopenfilename()
        if in_file_name:
            try:
                with open(in_file_name, "r") as in_file:
                    self.file_name.set(in_file_name)
                    self.file_content = in_file.read()
                    self.text.delete(1.0, END)
                    self.text.insert(END, self.file_content)
            except Exception as e:
                showerror("错误", str(e))

    def encrypt_file(self):
        if not self.file_name.get():
            showerror("错误", "请先打开文件")
            return

        if not self.key.get().isdigit():
            showerror("错误", "密钥必须是整数")
            return

        try:
            key = int(self.key.get())
            self.caesar = Caesar(key)
            encrypted_text = self.caesar.encrypt(self.file_content)

            out_file_name = asksaveasfilename()
            if out_file_name:
                with open(out_file_name, "w") as out_file:
                    out_file.write(encrypted_text)
        except Exception as e:
            showerror("错误", str(e))

    def decrypt_file(self):
        if not self.file_name.get():
            showerror("错误", "请先打开文件")
            return

        if not self.key.get().isdigit():
            showerror("错误", "密钥必须是整数")
            return

        try:
            key = int(self.key.get())
            if not self.caesar:
                self.caesar = Caesar(key)
            decrypted_text = self.caesar.decrypt(self.file_content)

            out_file_name = asksaveasfilename()
            if out_file_name:
                with open(out_file_name, "w") as out_file:
                    out_file.write(decrypted_text)
        except Exception as e:
            showerror("错误", str(e))


FileEncryptWindow()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鷇韩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值