我有一个压缩文件(sav.zip),现在想为它设置密码:
zf = zipfile.ZipFile("sav.zip")
zf.setpassword("1234")
但是我出现了 TypeError: expected Bytes, got str
错误。
我的错误在哪里?
我有一个压缩文件(sav.zip),现在想为它设置密码:
zf = zipfile.ZipFile("sav.zip")
zf.setpassword("1234")
但是我出现了 TypeError: expected Bytes, got str
错误。
我的错误在哪里?
文档中没有提到,但在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不能读取这些文件。
ZipFile.setpassword(pwd)
将“_pwd_设置为默认密码,以解压加密文件”,与创建受密码保护的 zip 文件无关。请注意,此处仅涉及翻译,未提供任何其他内容。 - Chris
ZipFile.setpassword()
的文档,它的功能可能和你想象的不一样。 - Chriszf.setpassword(b"1234")
,基本上密码参数应该是字节而不是字符串。 - Aren Hovsepyan