7

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

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

但我得到一个TypeError: expected Bytes, got str.

我的错在哪里?

4

1 回答 1

18

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

zf.setpassword(b"1234")

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

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

注意: zipfile 上的密码所提供的保护可能不是很强,这取决于您要使用它的目的。例如,攻击者可以在不知道密码的情况下替换zip 文件中受密码保护的条目!参见security.stackexchange 上的这个答案

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

于 2017-04-16T17:30:43.327 回答