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 forZipFile.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:文件密码错误