我使用 zipfile
库对加密的zip文件进行了字典攻击。当我开始使用BIG词典时,我有时得到假阳性结果,即密码可能是“羊毛”而“12630”被认为是正确的。在这种情况下,解密文件显然包含乱码。
这不是我的代码中的错误,但是 zipfile
库检查提供的密码是否正确。我设法通过检查解密文件的大小来减少误报,如果它等于0则认为它是假的并继续搜索。但我的问题仍然存在,因为当文件包含乱码时,它的大小>所以我的问题是,有没有办法在Python中确定文件是否正确解密或者是否包含乱码?
PS。是的我知道使用 zipfile
解密zip文件的速度很慢,但正如我之前所说,我这样做是为了掌握Python。
这是我的代码:
import zipfile
import os
zfile=raw_input("Please input zip's file name\n")
diction=raw_input("Please input dictionary\n")
found = False
zipf = zipfile.ZipFile( zfile, 'r' )
f = open(diction, 'r')
for line in f:
pswd = line
pswd = pswd[:-1]
zipf.setpassword(pswd)
try:
zipf.extractall()
if (os.path.getsize(zfile[:-4]) != 0):
found = True
break
except RuntimeError:
continue
except Exception:
continue
zipf.close()
This是我在python的bug跟踪器中提交的错误报告。正如您所看到的,他们并不认为它是库的“错误”,这就是为什么我要求检查文件是否正确解密的替代方法。
PS。对于任何关心的人,在上面提供的链接中,他们告诉我这是zip文件格式的问题,并且没有什么可以做的。所以我猜,问题有点回答。
答案 0 :(得分:3)
来自this zipfile错误报告
“密码检查方案对zip标头使用单字节检查以确保一致性。 所以有一个(接近)1/256的误报机会,就是错误地将错误的密码检测为好;然后ZipFile类继续进行unarchiving,这就是事情失败的原因(因为“解密”流真的是垃圾)。“
是否抛出任何异常?请发布您的代码。