Zipfile 方法不起作用
Posted
技术标签:
【中文标题】Zipfile 方法不起作用【英文标题】:Zipfile Method doesn't works 【发布时间】:2015-11-06 23:23:25 【问题描述】:我使用rockyou
密码创建了一个压缩文件,并尝试提取所有文件。但是我遇到了一些问题。不管我在 extractall 中输入的密码如何,我都会得到:
('Bad password for file', <zipfile.ZipInfo object at 0x7f7928d14dc8>)
代码:
import zipfile
zfile = zipfile.ZipFile("./rockyou.zip")
pss = b"rockyou"
try:
zfile.extractall(pwd = pss)
except RuntimeError as e:
print(e)
zfile.close()
如果我传递一个字符串,我会遇到另一个问题:
TypeError: pwd: expected bytes, got <class 'str'>
我也试过了:
pss = str.encode("rockyou")
还有:
pss = bytes(str.encode("rockyou"))
还有:
pss = bytes("rockyou".encode("UTF-8"))
有人帮忙吗?
【问题讨论】:
你为什么要转换成字节?为什么不直接作为字符串传递? 另外,不要使用pass
,因为它是保留字
请确认您可以使用标准 zip 程序使用该密码打开文件。
你见过this?
一个丑陋(但实用)的解决方案是:os.system('7z e -y -p"password" filename.zip')
导入后os
【参考方案1】:
嗯,我找到了解决这个问题的方法,对我有用,但可能不是那么漂亮......
zFile.extractall(pwd = 'PASSWORD'.encode('cp850','replace'))
【讨论】:
谢谢你,收到TypeError: pwd: expected bytes, got <class 'str'>
【参考方案2】:
我一直在关注暴力 python 书,在第一章中你制作了一个迷你脚本来解锁一个加密的 zip 文件。对我有用的是添加一个b
,这样字符串就会以字节为单位:
import zipfile
zFile = zipfile.ZipFile("evil.zip")
zFile.extractall(pwd=b'secret') #this is what i'm talking about
【讨论】:
如上所述,看起来这是 zipfiles 加密之间的兼容性问题,因此如果您使用 AES-256 加密文件会出现错误。我不知道是否已修复,但正确的方法是在 pwd-param 中传递字节并使用 zipcrypto 加密模式加密您的文件。以上是关于Zipfile 方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章