zipfile模块给出不可靠的结果

时间:2011-01-12 15:54:51

标签: python zipfile

我使用 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文件格式的问题,并且没有什么可以做的。所以我猜,问题有点回答。

1 个答案:

答案 0 :(得分:3)

来自this zipfile错误报告

“密码检查方案对zip标头使用单字节检查以确保一致性。 所以有一个(接近)1/256的误报机会,就是错误地将错误的密码检测为好;然后ZipFile类继续进行unarchiving,这就是事情失败的原因(因为“解密”流真的是垃圾)。“

是否抛出任何异常?请发布您的代码。