基于 Tkinter 的文件加密工具
在日常工作中,文件加密是保护敏感信息的重要手段。今天我将介绍一个基于 Python Tkinter 库开发的文件加密工具,它不仅界面友好,还支持多种加密选项和算法,满足不同场景的加密需求。
工具核心功能
支持多种文件类型加密(文本、代码、Excel等)
提供多种加密模式(二进制、四进制)
支持多种压缩算法(zlib、gzip、bz2等10种)
可自定义压缩次数(不压缩、一次压缩、二次压缩)
文件路径选择和状态显示
界面设计思路
1. 整体布局设计
我使用了现代化UI设计思路:
主窗口尺寸为750x700,足够显示所有控件
使用ttk样式系统创建统一风格
状态栏显示操作状态
分组布局使界面更清晰
class SparrowFileEncryption(tk.Tk):
def __init__(self):
super().__init__()
self.title("39文件加密工具")
self.geometry("750x700")
self.resizable(True, True)
# 创建样式
self.style = ttk.Style()
self.style.configure('TButton', font=('Arial', 10), padding=5)
self.style.configure('Header.TLabel', font=('Arial', 16, 'bold'), foreground='#2c3e50')
self.style.configure('Section.TLabel', font=('Arial', 10, 'bold'), foreground='#3498db')
self.style.configure('Status.TLabel', font=('Arial', 9), foreground='#7f8c8d')
self.style.configure('Success.TLabel', font=('Arial', 9), foreground='#27ae60')
self.create_widgets()2. 文件选择区域
文件选择是加密的第一步,我设计了清晰的文件选择按钮和状态显示:
def create_widgets(self):
# 文件选择部分
file_frame = ttk.LabelFrame(main_frame, text="文件选择", padding=10)
file_frame.pack(fill=tk.X, pady=5)
# 选择文件夹按钮
folder_btn = ttk.Button(
file_frame, text="选择加密文件保存文件夹",
command=self.choose_folder
)
folder_btn.pack(fill=tk.X, pady=3)
# 文件夹选择状态
self.select_folder_text = ttk.Label(
file_frame, text="未选择文件夹",
style='Status.TLabel'
)
self.select_folder_text.pack(fill=tk.X, pady=(0, 5))3. 选项设置区域
使用Notebook组件将选项分为两个标签页,使界面更整洁:
# 选项部分 - 使用Notebook进行标签页分组
options_notebook = ttk.Notebook(main_frame)
options_notebook.pack(fill=tk.X, pady=5)
# 压缩和加密模式选项放在同一个标签页
compression_tab = ttk.Frame(options_notebook, padding=10)
options_notebook.add(compression_tab, text="压缩和加密设置")
# 加密算法选项放在另一个标签页
algorithm_tab = ttk.Frame(options_notebook, padding=10)
options_notebook.add(algorithm_tab, text="加密算法")4. 加密算法选择
支持10种不同的加密算法,使用两列布局展示:
# 加密算法部分 - 最多两排
algorithm_frame = ttk.LabelFrame(algorithm_tab, text="加密算法", padding=5)
algorithm_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
self.algorithm_var = tk.StringVar(value="zlib")
algorithms = ['zlib', 'gzip', 'bz2', 'lzma', 'lz4',
'brotli', 'snappy', 'huffman', 'deflate', 'lz77']
# 使用两列框架布局
col1_frame = ttk.Frame(algorithm_frame)
col1_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=5)
col2_frame = ttk.Frame(algorithm_frame)
col2_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=5)
# 将算法分成两组,每组5个
for i, option in enumerate(algorithms[:5]):
rb = ttk.Radiobutton(
col1_frame, text=option,
variable=self.algorithm_var,
value=option
)
rb.pack(anchor=tk.W, pady=2, padx=5)5. 文件名和密钥输入
这两个关键信息使用简单的输入框设计:
# 文件名输入
name_frame = ttk.Frame(main_frame)
name_frame.pack(fill=tk.X, pady=3)
name_label = ttk.Label(name_frame, text="加密文件保存名字:", width=18)
name_label.pack(side=tk.LEFT, padx=(0, 5))
self.file_name_entry = ttk.Entry(name_frame)
self.file_name_entry.pack(fill=tk.X, expand=True)
# 密钥输入
key_frame = ttk.Frame(main_frame)
key_frame.pack(fill=tk.X, pady=3)
key_label = ttk.Label(key_frame, text="秘钥:", width=18)
key_label.pack(side=tk.LEFT, padx=(0, 5))
self.key_entry = ttk.Entry(key_frame, show="*")
self.key_entry.pack(fill=tk.X, expand=True)6. 加密按钮和状态栏
醒目的加密按钮和底部状态栏设计:
# 加密按钮
encrypt_btn = ttk.Button(
main_frame, text="加密文件",
command=self.on_encrypt_clicked,
style='TButton'
)
encrypt_btn.pack(fill=tk.X, pady=10)
# 状态栏
status_bar = ttk.Frame(self, relief=tk.SUNKEN)
status_bar.pack(side=tk.BOTTOM, fill=tk.X)
self.status_text = ttk.Label(
status_bar, text="就绪",
anchor=tk.W, style='Status.TLabel'
)
self.status_text.pack(side=tk.LEFT, padx=10)核心功能实现
1. 文件选择功能
def choose_folder(self):
folder_path = filedialog.askdirectory(title="选择文件夹")
if folder_path:
self.folder_path = folder_path
folder_name = folder_path.split("/")[-1]
self.select_folder_text.configure(
text=f"已选择: {folder_name}",
style='Success.TLabel'
)
self.update_status(f"已选择保存文件夹: {folder_name}")
def choose_file(self):
file_types = [
('Excel文件', '*.xlsx *.xls'),
('文本文件', '*.txt'),
# 支持多种文件类型...
('所有文件', '*.*')
]
file_path = filedialog.askopenfilename(
title="选择要加密的文件",
filetypes=file_types
)
if file_path:
self.file_path = file_path
file_name = file_path.split("/")[-1]
self.select_file_text.configure(
text=f"已选择: {file_name}",
style='Success.TLabel'
)
self.update_status(f"已选择要加密的文件: {file_name}")2. 加密核心逻辑
def encryption(self, folder, file, times, function, compress, key, to_file):
if function == '二进制加密':
function = 0
else:
function = 1
if times == "二次压缩":
times = 2
elif times == "一次压缩":
times = 1
else:
times = 0
file_type = file.split("/")[-1].split(".")[-1]
supported_types = [
"txt", "py", "java", "js", "html", "ipynb", "less", "css", "pcss",
"scss", "ts", "sass", "c", "cpp", "cc", "C", "cxx", "c++", 'h',
"php", "go", "kt", "cs", "rb", "pl", "pm", "swift", "sql", "xls",
"xlsx", "db", 'R', "scala"
]
if file_type in supported_types:
try:
self.ef.encryption_txt(file, key, -1, times, function, folder, to_file, file_type, compress)
messagebox.showinfo("成功", "文件加密成功!")
self.update_status("文件加密成功!")
except Exception as e:
messagebox.showerror("错误", f"加密过程中发生错误:\n{str(e)}")
self.update_status(f"加密错误: {str(e)}")
else:
messagebox.showerror("错误", f"不支持加密 {file_type} 格式的文件")
self.update_status(f"不支持的文件类型: {file_type}")3. 加密按钮事件处理
def on_encrypt_clicked(self):
# 检查是否选择了文件夹和文件
if not self.folder_path:
messagebox.showwarning("警告", "请先选择加密文件保存文件夹")
self.update_status("错误: 未选择保存文件夹")
return
if not self.file_path:
messagebox.showwarning("警告", "请先选择要加密的文件")
self.update_status("错误: 未选择要加密的文件")
return
# 检查文件名和密钥是否为空
file_name = self.file_name_entry.get().strip()
if not file_name:
messagebox.showwarning("警告", "请输入加密文件保存名字")
self.update_status("错误: 未输入文件名")
return
key = self.key_entry.get().strip()
if not key:
messagebox.showwarning("警告", "请输入加密秘钥")
self.update_status("错误: 未输入秘钥")
return
# 获取选项值
times = self.compress_var.get()
function = self.mode_var.get()
compress = self.algorithm_var.get()
self.update_status("正在加密文件,请稍候...")
# 调用加密方法
self.encryption(
self.folder_path,
self.file_path,
times,
function,
compress,
key,
file_name
)使用技巧和注意事项
文件类型支持:工具支持多种编程语言文件和文档格式,包括Python、Java、C++、Excel等
加密模式选择:
二进制加密:适合大多数场景
四进制加密:提供更高级别的安全性
压缩选项:
二次压缩:最高压缩率,适合大型文件
一次压缩:平衡压缩率和速度
不压缩:最快速度,适合小文件
密钥设置:
使用强密码(字母+数字+特殊字符)
记住密钥!丢失密钥将无法解密文件
总结
这个文件加密工具通过Tkinter实现了:
直观的用户界面设计
多种加密算法和压缩选项
完善的错误处理和用户反馈
支持多种常用文件格式
整个工具代码结构清晰,功能完整,可以直接复制使用或根据需要进行扩展。通过合理使用Tkinter的布局和样式系统,即使是命令行工具也可以拥有美观的图形界面。
下载
文件加密V1.1.0.0
描述:
将各种文件进行加密
下载:
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

