2

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

这不是我的代码中的错误,而是zipfile库检查提供的密码是否正确的方式。我设法通过检查解密文件的大小来减少误报,如果它等于 0,则认为它是错误的并继续搜索。但是我的问题仍然存在,因为当文件包含乱码时,它的大小> 0。所以我的问题是,有什么方法可以在 Python 中确定文件是否已正确解密或是否包含乱码?

PS。是的,我知道解密 zip 文件zipfile很慢,但正如我之前所说,我这样做是为了掌握 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 的错误跟踪器中提交的错误报告。正如您所看到的,他们不认为这是库的“错误”,这就是为什么我要求检查文件是否正确解密的替代方法。

PS。对于任何关心的人,在上面提供的链接中,他们告诉我这是 zip 文件格式的问题,没有什么可以做的。所以我想,问题有点回答了。

4

1 回答 1

3

这个zipfile 错误报告

“密码检查方案对 zip 标头使用单字节检查以确保一致性。因此有(接近)1/256 的误报机会,即错误密码被错误地检测为好密码;然后 ZipFile 类继续取消存档,这就是失败的地方(因为“解密”流真的很垃圾)。”

有没有抛出异常?请发布您的代码。

于 2011-01-12T16:17:51.277 回答