Python图形用户界面的文本文件加密工具
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x5oEvdLE-1720676762602)(https://i-blog.csdnimg.cn/direct/ddf0cd975b2d48a9a2f3b35c55e00add.png)]
设计方案
DES.py
DESAlgorithm 类负责管理密钥并提供加密和解密的功能。
在构造函数中,我们初始化了一个 8 字节的密钥。
encrypt 方法的实现如下:
- 首先,创建一个 DES 加密器,并指定 ECB 模式。
- 然后,使用 pad 函数对明文字符串进行填充,使其长度为 DES 块大小(8 字节)的整数倍。
- 最后,使用加密器的 encrypt 方法对填充后的明文进行加密,并返回加密后的二进制数据。
decrypt 方法的实现如下: - 首先,创建一个 DES 解密器,并指定 ECB 模式。
- 然后,使用解密器的 decrypt 方法对加密后的二进制数据进行解密。
- 最后使用 unpad 函数去除填充,并将解密后的二进制数据转换为明文字符串。
create_DES_cipher 函数用于创建 DES 加密/解密器,并接受密钥和工作模式作为输入。
pad 和 unpad 函数分别用于对数据进行填充和去除填充。
创建了一个 8 字节的密钥。
创建 DESAlgorithm 实例,并使用该实例对明文进行加密和解密。
打印出加密后的数据和解密后的数据,以验证加密和解密的正确性。
CAREASR.py
Caesar 类用来实现凯撒密码加密和解密。
在初始化函数 init 中:
- 接受一个 miyao 参数,表示密钥(位移量)。
- 创建了一个 biao 字符串,包含了 26 个大写字母、26 个小写字母、10 个数字以及一些常用的标点符号,这个字符串将作为字符集使用。
encrypt 方法实现了加密功能:
- 初始化一个空字符串 cipText 作为加密结果。
- 遍历输入的 Text 字符串。
- 对于每个字符,如果它在 biao字符集中,则查找它在 biao 中的索引 index。
- 计算新的索引 cipherIndex 为 (index + miyao) % len(biao)。
- 将 biao 中对应新索引的字符添加到 cipText 中。
- 最终返回加密后的字符串 cipText。
decrypt 方法实现了解密功能:
- 初始化一个空字符串 clearText 作为解密结果。
- 遍历输入的 cipText 字符串。
- 对于每个字符,如果它在 biao字符集中,则查找它在 biao 中的索引 index。
- 计算新的索引 clearIndex 为 (index - miyao) %len(biao)。
- 将 biao 中对应新索引的字符添加到 clearText 中。
- 最终返回解密后的明文字符串 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() 方法
代码
python">from tkinter import *
from tkinter.filedialog import askopenfilename, asksaveasfilename
from tkinter.messagebox import showerror
class Caesar:def __init__(self, miyao):self.miyao = miyaoself.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 cipTextdef 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 clearTextclass FileEncryptWindow:def __init__(self):self.window = Tk()self.caesar = Noneself.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("错误", "请先打开文件")returnif not self.key.get().isdigit():showerror("错误", "密钥必须是整数")returntry: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("错误", "请先打开文件")returnif not self.key.get().isdigit():showerror("错误", "密钥必须是整数")returntry: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()