首页 > 解决方案 > 如何使用密码保护 ZipFile 类型的对象?

问题描述

我正在尝试将受密码保护的 zip 文件作为 base64 字符串发送。

data = BytesIO()
zip = zipfile.ZipFile(data, 'w') 
zip.writestr('test.csv', 'Hello, World')
zip.setpassword(b'1234')
zip.close()
b64zip = base64.b64encode(data.getvalue()).decode('utf-8')

然后将此b64zip变量解析为电子邮件附件。

但是,当我尝试解压缩 zip 时,它不会提示输入密码。正在使用此线程作为参考:   zipfile:如何为 Zipfile 设置密码?

如何将受密码保护的 zip 文件创建为 base64 字符串?

标签: pythonbase64passwordszippython-zipfile

解决方案


你犯了一些错误:

  1. 您已经打开了一个要写入的 zip 文件,而 zip 文件路径就是数据本身。
  2. 您正在尝试压缩数据而不是错误的文件。您应该加密数据,而不是压缩它。
  3. 如果要压缩数据,请将其写入 TXT 文件,然后压缩 TXT 文件。
  4. 尝试使用另一个压缩库,例如:[pyunpack、Pyzipper、pyminizip,...]。

我已经通过使用pyminizip库解决了这个问题:

import pyminizip as pyzip

data = 'stored data'.encode()
with open(".\\data.txt", "wb") as dt : dt.write(data)
pyzip.compress("data.txt", "", "data.zip", "PASSWORD", 8)

推荐阅读