Python zipfile模块给出不可靠的结果

Python zipfile模块给出不可靠的结果,python,zipfile,Python,Zipfile,我使用zipfile库对加密的zip文件进行了字典攻击。当我开始使用大字典时,有时会得到假阳性结果,即密码可能是“wool”,而“12630”被认为是正确的。在这种情况下,解密的文件显然包含胡言乱语 这不是我的代码中的错误,而是库检查提供的密码是否正确的方式。我已经设法通过检查解密文件的大小来减少假阳性,如果它等于0,则认为它是错误的并且继续搜索。但我的问题仍然存在,因为当文件包含乱码时,它的大小>0。所以我的问题是,有没有任何方法可以在Python中确定一个文件是否正确解密,或者它是否包含胡言

我使用zipfile库对加密的zip文件进行了字典攻击。当我开始使用大字典时,有时会得到假阳性结果,即密码可能是“wool”,而“12630”被认为是正确的。在这种情况下,解密的文件显然包含胡言乱语

这不是我的代码中的错误,而是库检查提供的密码是否正确的方式。我已经设法通过检查解密文件的大小来减少假阳性,如果它等于0,则认为它是错误的并且继续搜索。但我的问题仍然存在,因为当文件包含乱码时,它的大小>0。所以我的问题是,有没有任何方法可以在Python中确定一个文件是否正确解密,或者它是否包含胡言乱语

是的,我知道用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()  
是我在python的bug跟踪器中提交的bug报告。正如你所看到的,他们不认为它是图书馆的“bug”,这就是为什么我要求检查文件是否正确解密的替代品。 另外,对于任何关心的人,在上面提供的链接中,他们告诉我这是一个zip文件格式的问题,没有什么可以做的。所以我想,这个问题已经有了答案。

来自zipfile bug报告

“密码检查方案对zip头使用单字节检查以确保一致性。 因此有(接近)1/256的误报概率,即错误地将坏密码检测为好密码;然后ZipFile类继续进行无归档,这就是失败的原因(因为“解密”流实际上是垃圾)


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

如果您确认python zipfile有一个bug,我想您必须向python bug追踪器报告。我已经报告了,Nathan粘贴的是他们的回复。有点让人想起“这不是一个bug,它是一个特性”。这就是为什么我要寻找方法来检查解密的文件是否损坏。是否有不正确的密码不会产生异常的情况?是的,有,我的主要问题不是异常,因为它被捕获了。我的问题是,有不正确的密码不会产生异常和“解密”文件(显然它无法解密)。我想找到一种方法来阻止这种情况发生,或者忽略那些密码。这是我的代码和我的错误报告,也许我应该首先包括它。我对代码做了一些修改,将尽快更新我的问题。这很奇怪。在某些情况下不会抛出异常,这听起来像是一个bug。或者他们特别不希望zipfile被用于暴力zipfile密码攻击。是的,这很奇怪。在Python3.1中,zipfile检查密码是否正确的方式略有改变,但问题仍然存在。我猜是出于某种奇怪的原因,他们想这样做/