From 4ed2dd484d9c00a7616c17b6754335f4863b985f Mon Sep 17 00:00:00 2001 From: yhydev Date: Sat, 13 Dec 2025 10:56:18 +0800 Subject: [PATCH] Fix ZIP password encryption functionality by using 7zip --- myscripts/working_tool.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/myscripts/working_tool.py b/myscripts/working_tool.py index 18c9ed6..039f580 100644 --- a/myscripts/working_tool.py +++ b/myscripts/working_tool.py @@ -240,20 +240,31 @@ def upload_working_files(password=None): # 如果提供了密码,创建加密ZIP文件 if password: - # 直接创建加密ZIP文件,替换原有的非加密文件 + # 删除原有的非加密文件 os.unlink(zip_path) # 获取WORKING_DIR working_dir = get_working_dir() - # 使用内置的zipfile模块创建加密ZIP - with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as zipf: + # 尝试使用7zip创建加密ZIP文件 + try: + import subprocess + + # 构建7zip命令 - 注意:7zip参数之间没有空格 + cmd = ['7z', 'a', '-tzip', '-p' + password, '-mx9', zip_path] + + # 添加所有文件到命令中 for file_path in working_files: # 计算相对路径,保持目录结构 arcname = os.path.relpath(file_path, working_dir) - zipf.write(file_path, arcname) - # 设置密码用于解密 - zipf.setpassword(password.encode()) + # 7zip需要相对路径,从working_dir开始 + cmd.append(os.path.relpath(file_path, working_dir)) + + # 切换到working_dir执行命令,确保相对路径正确 + subprocess.run(cmd, check=True, capture_output=True, cwd=working_dir) + except (subprocess.CalledProcessError, FileNotFoundError): + # 如果7zip不可用,抛出错误 + raise Exception("Failed to create encrypted ZIP file: 7zip is not available or failed to execute") # 上传到tmpfile download_url = upload_to_tmpfile(zip_path)