2017-04-16 75 views
0

我在(sav.zip)一个zip文件,我想为它设置一个密码:Python - zipfile:如何为zipfile设置密码?

ZF = zipfile.ZipFile( “sav.zip”)

zf.setpassword(“1234 “)

,但...我得到一个类型错误:预期的字节,得到了海峡

哪里是我的错?

+2

请阅读[ZipFile.setpassword()']的文档(https://docs.python.org/3/library/zipfile.html#zipfile.ZipFile.setpassword)。它不会做你认为它做的事。 – Chris

+0

试试这个'zf.setpassword(b“1234”)',基本上密码参数应该是字节而不是字符串。 –

+0

通过“设置密码”是否要将其转换为受密码保护的zip文件,还是已经有密码保护,并且您想设置读取密码? – tdelaney

回答

2

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

zf.setpassword(b"1234") 

注意密码是用于阅读,不写!参见ZipFile.open文档字符串在Python 3.

ZipFile的类可以读“PKZIP 2.0”加密,这不被认为是非常强(它具有known weaknesses [PDF])。这可能是编写它们目前不是Python(如Python 2.7.13和3.6)在Python中实现的原因。

注意:由zipfile上的密码提供的保护可能不是非常强大,具体取决于您要使用的密码。攻击者可以例如替换不知道密码在密码保护条目中的zip文件!见例如this answer on security.stackexchange。

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

+0

我不这么认为:['ZipFile.setpassword(pwd)'](https://docs.python.org/3/library/zipfile.html#zipfile.ZipFile.setpassword)将“_pwd_设置为默认密码为提取加密文件“。它与创建受密码保护的zip文件没有任何关系。 – Chris

+0

编辑以反映这一点。 –

+0

谢谢 - 这只是'b',问题解决了:-) – DrEGZo