python - 如何使用密码保护 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 字符串?
解决方案
你犯了一些错误:
- 您已经打开了一个要写入的 zip 文件,而 zip 文件路径就是数据本身。
- 您正在尝试压缩数据而不是错误的文件。您应该加密数据,而不是压缩它。
- 如果要压缩数据,请将其写入 TXT 文件,然后压缩 TXT 文件。
- 尝试使用另一个压缩库,例如:[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)
推荐阅读
- typescript - Azure Functions - 等待 context.log
- java - 不要在 API 26+ android 设备上显示套接字消息
- java - Selenium switchTo return error org.openqa.selenium.WebDriverException: unknown error: cannot determine loading status
- apache-spark - 如何在使用 spark 从 oracle db 读取数据时实现更多并行性
- javascript - 如何使用 Cognito 身份池和 Amplify 连接到 AWS AppSync
- r - 有没有办法使用 SAS 或 R 逐行解析和标记联系信息?
- windows - 在同一台PC上配置maven3.1.1和maven3.6.0
- javascript - 在引导模式的不同选项卡上显示 laravel auth 错误
- javascript - 从 Javascript 以编程方式触发 ng-change 事件
- javascript - 有没有更好的方法来发送表单数据?