39 文件加解密工具:一体化加密解密解决方案
在前两篇文章中,我们分别介绍了文件加密工具和配套的解密工具。今天,我们将这两个工具整合为一个完整的解决方案 ——39 文件加解密工具,通过选项卡式界面实现加密和解密功能的无缝切换,提供更统一、更便捷的用户体验。
工具核心设计
整体架构
class SparrowFileApp(tk.Tk):
def __init__(self):
super().__init__()
# 初始化加密解密引擎
self.ef = EncryptionFile()
self.df = DecryptionFile()
# 设置窗口属性
self.title("39文件加解密工具")
self.geometry("700x800")
self.resizable(True, True)
# 创建样式系统
self.create_styles()
# 初始化路径变量
self.encrypt_folder_path = ""
self.encrypt_file_path = ""
self.decrypt_folder_path = ""
self.decrypt_file_path = ""
# 构建UI
self.create_widgets()界面设计亮点
选项卡式布局:
def create_widgets(self): # 状态栏 self.status_bar = ttk.Frame(self, relief=tk.SUNKEN) self.status_bar.pack(side=tk.BOTTOM, fill=tk.X) # 选项卡控件 self.notebook = ttk.Notebook(self) self.notebook.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) # 加密选项卡 self.encrypt_tab = ttk.Frame(self.notebook) self.notebook.add(self.encrypt_tab, text="文件加密") self.setup_encryption_tab() # 解密选项卡 self.decrypt_tab = ttk.Frame(self.notebook) self.notebook.add(self.decrypt_tab, text="文件解密") self.setup_decryption_tab()专业样式系统:
def create_styles(self): 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.style.configure('Warning.TLabel', font=('Arial', 9), foreground='#e67e22')
加密功能实现
加密界面布局
def setup_encryption_tab(self):
# 主框架
main_frame = ttk.Frame(self.encrypt_tab, padding=15)
main_frame.pack(fill=tk.BOTH, expand=True)
# 标题
header = ttk.Label(main_frame, text="文件加密", style='Header.TLabel')
header.pack(pady=(0, 15))
# 文件选择区域
file_frame = ttk.LabelFrame(main_frame, text="文件选择", padding=10)
file_frame.pack(fill=tk.X, pady=5)
# 加密选项区域
options_frame = ttk.LabelFrame(main_frame, text="加密选项", padding=10)
options_frame.pack(fill=tk.X, pady=10)
# 压缩次数选择(水平布局)
compress_frame = ttk.LabelFrame(options_frame, text="压缩次数", padding=5)
compress_frame.pack(fill=tk.X, pady=5)
# 加密模式选择(水平布局)
mode_frame = ttk.LabelFrame(options_frame, text="加密模式", padding=5)
mode_frame.pack(fill=tk.X, pady=5)
# 加密算法选择(双行布局)
algorithm_frame = ttk.LabelFrame(options_frame, text="加密算法", padding=5)
algorithm_frame.pack(fill=tk.X, pady=5)
# 文件名和密钥输入
# ...
# 加密按钮
encrypt_btn = ttk.Button(
main_frame, text="加密文件",
command=self.on_encrypt_clicked,
style='TButton'
)
encrypt_btn.pack(fill=tk.X, pady=15)加密选项设计
压缩次数选择:
self.compress_var = tk.StringVar(value="二次压缩") # 水平排列的单选按钮 compress_row = ttk.Frame(compress_frame) compress_row.pack(fill=tk.X, padx=5) for option in ['二次压缩', '一次压缩']: rb = ttk.Radiobutton( compress_row, text=option, variable=self.compress_var, value=option ) rb.pack(side=tk.LEFT, padx=10, pady=2)加密算法选择:
self.algorithm_var = tk.StringVar(value="zlib") algorithms = ['zlib', 'gzip', 'bz2', 'lzma', 'lz4', 'brotli', 'snappy', 'huffman', 'deflate', 'lz77'] # 第一行算法 algo_row1 = ttk.Frame(algorithm_frame) algo_row1.pack(fill=tk.X, padx=5, pady=2) for option in algorithms[:5]: rb = ttk.Radiobutton( algo_row1, text=option, variable=self.algorithm_var, value=option ) rb.pack(side=tk.LEFT, padx=5, pady=2) # 第二行算法 algo_row2 = ttk.Frame(algorithm_frame) algo_row2.pack(fill=tk.X, padx=5, pady=2) for option in algorithms[5:]: rb = ttk.Radiobutton( algo_row2, text=option, variable=self.algorithm_var, value=option ) rb.pack(side=tk.LEFT, padx=5, pady=2)
解密功能实现
解密界面布局
def setup_decryption_tab(self):
# 主框架
main_frame = ttk.Frame(self.decrypt_tab, padding=15)
main_frame.pack(fill=tk.BOTH, expand=True)
# 标题
header = ttk.Label(main_frame, text="文件解密", style='Header.TLabel')
header.pack(pady=(0, 15))
# 文件选择区域
file_frame = ttk.LabelFrame(main_frame, text="文件选择", padding=10)
file_frame.pack(fill=tk.X, pady=5)
# 文件格式警告
format_frame = ttk.Frame(main_frame)
format_frame.pack(fill=tk.X, pady=10)
format_label = ttk.Label(
format_frame,
text="注意: 解密文件必须是 .sfed 格式",
style='Warning.TLabel'
)
format_label.pack(side=tk.LEFT, padx=5)
# 文件名和密钥输入
# ...
# 解密按钮
decrypt_btn = ttk.Button(
main_frame, text="解密文件",
command=self.on_decrypt_clicked,
style='TButton'
)
decrypt_btn.pack(fill=tk.X, pady=15)文件选择智能验证
def decrypt_choose_file(self):
file_types = [('加密文件', '*.sfed'), ('所有文件', '*.*')]
file_path = filedialog.askopenfilename(
title="选择要解密的文件",
filetypes=file_types
)
if file_path:
# 验证文件格式
if not file_path.lower().endswith('.sfed'):
self.decrypt_select_file_text.configure(
text="请选择.sfed文件",
style='Warning.TLabel' # 使用警告样式
)
self.update_status("错误: 请选择.sfed格式的加密文件")
return
self.decrypt_file_path = file_path
file_name = file_path.split("/")[-1]
self.decrypt_select_file_text.configure(
text=f"已选择: {file_name}",
style='Success.TLabel' # 使用成功样式
)
self.update_status(f"已选择要解密的文件: {file_name}")核心加解密逻辑
加密处理
def encryption(self, folder, file, times, function, compress, key, to_file):
# 转换加密参数
function = 0 if function == '二进制加密' else 1
times = 2 if times == "二次压缩" else 1 if times == "一次压缩" else 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}")解密处理
def decryption(self, folder, file, key, to_file):
# 从文件名解析原始文件类型和压缩算法
parts = file.split("/")[-1].split(".")
if len(parts) < 3 or parts[-1] != "sfed":
messagebox.showerror("文件格式错误", "请选择有效的 .sfed 加密文件")
self.update_status("错误: 无效的加密文件格式")
return
file_type = parts[-2] # 原始文件类型
compress = parts[-3] # 压缩算法
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", "xlsx",
"xls", "db", 'R', "scala"
]
if file_type in supported_types:
try:
# 调用解密引擎
self.df.decryption_txt(key, folder, file, 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}格式文件暂不支持解密\n"
"如加密文件确认无误,请检查文件格式是否被更改\n"
"例如: t.txt.sfed 被修改为 t.tx.sfed"
)
self.update_status(f"不支持的文件类型: {file_type}")状态管理和用户反馈
状态更新系统
def update_status(self, message):
"""更新状态栏信息"""
if hasattr(self, 'status_text'):
self.status_text.configure(text=message)
self.update() # 强制立即刷新界面输入验证
def on_encrypt_clicked(self):
# 检查是否选择了文件夹
if not self.encrypt_folder_path:
messagebox.showwarning("警告", "请先选择加密文件保存文件夹")
self.update_status("错误: 未选择保存文件夹")
return
# 检查是否选择了文件
if not self.encrypt_file_path:
messagebox.showwarning("警告", "请先选择要加密的文件")
self.update_status("错误: 未选择要加密的文件")
return
# 检查文件名是否为空
file_name = self.encrypt_file_name_entry.get().strip()
if not file_name:
messagebox.showwarning("警告", "请输入加密文件保存名字")
self.update_status("错误: 未输入文件名")
return
# 检查密钥是否为空
key = self.encrypt_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.encrypt_folder_path,
self.encrypt_file_path,
times,
function,
compress,
key,
file_name
)设计亮点总结
模块化设计:
加密和解密功能分离在独立选项卡中
每个功能模块有独立的变量和状态管理
核心逻辑与界面代码分离
专业视觉系统:
多层级样式配置
状态颜色编码(正常、成功、警告)
合理的控件间距和分组
智能文件处理:
加密时自动识别文件类型
解密时从文件名提取原始类型和算法
文件格式自动验证
用户体验优化:
实时状态反馈
详细的错误信息和解决方案
输入验证和用户引导
水平布局节省空间
扩展性设计:
支持10种加密算法
支持多种压缩级别
支持30+文件格式
使用指南
加密文件步骤:
切换到"文件加密"选项卡
选择保存加密文件的文件夹
选择要加密的文件
设置加密选项:
压缩次数(二次压缩/一次压缩)
加密模式(二进制/四进制)
加密算法
输入加密文件保存名称
设置加密密钥
点击"加密文件"按钮
解密文件步骤:
切换到"文件解密"选项卡
选择保存解密文件的文件夹
选择.sfed格式的加密文件
输入解密文件保存名称
输入解密密钥(必须与加密时相同)
点击"解密文件"按钮
这个工具通过精心设计的界面和健壮的后台逻辑,为用户提供了专业级的文件加解密解决方案。选项卡式设计使加密解密操作互不干扰,状态管理系统提供实时反馈,智能文件处理减少用户操作步骤,整体上大大提升了用户体验和操作效率。
下载
文件加解密V1.1.0.0
描述:
对文件进行加密
对文件进行解密
下载:
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

