You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ZipFile类型对象设置密码保护并生成base64格式字符串

带密码保护ZIP文件生成及Base64转换解决方案

问题根因

你当前使用的Python标准库zipfile仅支持读取解密加密压缩包,不支持写入加密,setpassword()方法仅作用于解压场景,因此你生成的zip实际为无密码保护的普通文件,解压时自然不会触发密码校验。

解决方案

推荐方案:使用pyzipper库生成AES加密压缩包

pyzipper是完全兼容zipfile接口的第三方库,原生支持写入AES加密的zip文件,跨平台可用。

  1. 安装依赖
pip install pyzipper
  1. 完整实现代码
import base64
from io import BytesIO
import pyzipper

data = BytesIO()
# 创建AES加密的zip文件对象
with pyzipper.AESZipFile(
    data,
    mode='w',
    compression=pyzipper.ZIP_DEFLATED,
    encryption=pyzipper.WZ_AES
) as zip_obj:
    # 设置解压密码
    zip_obj.setpassword(b'1234')
    # 写入需要打包的文件内容
    zip_obj.writestr('test.csv', 'Hello, World')

# 将内存中的zip内容转换为base64字符串
b64zip = base64.b64encode(data.getvalue()).decode('utf-8')

生成的压缩包支持所有主流解压工具,打开时会正常触发密码输入提示。

可选方案:调用系统原生zip命令

如果不想引入第三方依赖,且运行环境为Linux/macOS,可直接调用系统zip命令生成加密压缩包:

import subprocess
import base64
from io import BytesIO

# 先将待打包的内容写入临时文件,也可通过管道传递
with open('test.csv', 'w') as f:
    f.write('Hello, World')

# 调用系统zip命令生成带密码的压缩包,-P参数指定密码
subprocess.run(['zip', '-P', '1234', 'output.zip', 'test.csv'], check=True)

# 读取压缩包内容转base64
with open('output.zip', 'rb') as f:
    b64zip = base64.b64encode(f.read()).decode('utf-8')

注意:该方案生成的是Zip 2.0标准加密压缩包,安全性低于AES加密,且Windows环境需要提前安装zip命令工具才可使用。


内容的提问来源于stack exchange,提问作者ang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:57:04