Zipfile: 如何为Zip文件设置密码?

7

我有一个压缩文件(sav.zip),现在想为它设置密码:

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

但是我出现了 TypeError: expected Bytes, got str 错误。

我的错误在哪里?


4
请阅读ZipFile.setpassword()的文档,它的功能可能和你想象的不一样。 - Chris
尝试使用zf.setpassword(b"1234"),基本上密码参数应该是字节而不是字符串。 - Aren Hovsepyan
1
您所说的“设置密码”,是要将其转换为受密码保护的压缩文件,还是它已经受到密码保护,您要设置读取密码? - tdelaney
1个回答

21

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

zf.setpassword(b"1234")

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

ZipFile类可以读取"pkzip 2.0"加密,但这种加密不是特别强大(它有已知弱点[pdf])。这可能是目前(截至Python 2.7.13和3.6)Python没有实现写入的原因之一。

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

注意2:更高版本的winzip等软件可以使用AES加密zipped文件的内容。据我所知,Python不能读取这些文件。


6
我不这么认为:ZipFile.setpassword(pwd) 将“_pwd_设置为默认密码,以解压加密文件”,与创建受密码保护的 zip 文件无关。请注意,此处仅涉及翻译,未提供任何其他内容。 - Chris
已经编辑过了。 - Roland Smith
谢谢 - 只是 'b' 的问题,问题解决了 :-) - user7875282
3
ZipFile库无法为zip文件设置密码,您需要使用pyminizip:请参见https://dev59.com/e1YN5IYBdhLWcg3wXnJa?rq=1。 - Minions
1
如果您想使用密码压缩多个内存中的文件,请使用pyzipper。 - goodgrief

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接