zipfile:如何为 Zipfile 设置密码? [复制]

Posted

技术标签:

【中文标题】zipfile:如何为 Zipfile 设置密码? [复制]【英文标题】:zipfile: how to set a password for a Zipfile? [duplicate] 【发布时间】:2017-04-16 17:26:14 【问题描述】:

我在 (sav.zip) 中有一个 zip 文件,我正在尝试为其设置密码:

zf = zipfile.ZipFile("sav.zip")
zf.setpassword("1234")

但我收到了TypeError: expected Bytes, got str

我的错在哪里?

【问题讨论】:

请阅读the documentation for ZipFile.setpassword()。它没有做你认为它做的事情。 试试这个zf.setpassword(b"1234"),基本上密码参数应该是字节而不是字符串。 通过“设置密码”是要将其转换为受密码保护的 zip 文件,还是已经受密码保护并且您想设置密码以供阅读? 【参考方案1】:

文档中没有提到,但是在 Python 3 上,密码应该是bytes,而不是str。所以:

zf.setpassword(b"1234")

请注意,密码用于读取,而不是写入!请参阅 Python 3 中 ZipFile.open 的文档字符串。

ZipFile 类可以读取“pkzip 2.0”加密,这被认为不是很强大(它有known weaknesses [pdf])。这可能是目前(从 Python 2.7.13 和 3.6 开始)没有在 Python 中实现编写它们的原因。

注意: zip 文件上的密码所提供的保护可能不是很强,这取决于你想用它来做什么。攻击者可以例如替换压缩文件中受密码保护的条目不知道密码!参见例如this answer 在 security.stackexchange 上。

注 2: 更新版本的例如winzip 可以使用 AES 加密压缩文件的内容。 AFAIK,Python 无法读取这些内容。

【讨论】:

我不这么认为:ZipFile.setpassword(pwd) 将“pwd 设置为提取加密文件的默认密码”。它与创建受密码保护的 zip 文件没有任何关系。 编辑以反映这一点。 谢谢 - 这只是'b',问题解决了:-) ZipFile 库无法为 zip 文件设置密码,您必须使用 pyminizip:参见 ***.com/questions/47547590/… 如果你想用密码压缩多个内存文件,使用pyzipper。

以上是关于zipfile:如何为 Zipfile 设置密码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python zipfile:RuntimeError:文件密码错误

Zipfile 方法不起作用

无法使用 python zipfile 库解压缩带有密码的 .zip 文件

Python 和 zipfile 模块

不支持 Python Zipfile 压缩方法

python zipfile解压缩