Python Zip密码功能工作错误

Python Zip密码功能工作错误,python,python-3.x,zip,brute-force,Python,Python 3.x,Zip,Brute Force,我有一个悖论,我无法解释。 简而言之:我构建了一个python脚本,该脚本应该能够破解一个受密码保护的压缩文件 这就是我所做的: (1) 压缩文本文件: zip——密码bla zip3.zip myZip所以密码短语是“bla” (2) 然后我使用以下Python脚本: import zipfile import itertools from itertools import * import string import time 这是检查给定密码是否有效的基本功能: def crack(Fi

我有一个悖论,我无法解释。 简而言之:我构建了一个python脚本,该脚本应该能够破解一个受密码保护的压缩文件

这就是我所做的:

(1) 压缩文本文件:
zip——密码bla zip3.zip myZip
所以密码短语是“bla”

(2) 然后我使用以下Python脚本:

import zipfile
import itertools
from itertools import *
import string
import time
这是检查给定密码是否有效的基本功能:

def crack(File, pwd):
    try:
        File.extractall(pwd=str.encode(pwd))
        print("\n---- SUCCESS! {0} ----".format(pwd))
    except:
        print("{0} did not work.".format(pwd))
        pass
在这里,我指定要用于尝试的字符:
myLetters=string.ascii_字母

在这里,我指定要破解的zip文件:
File=zipfile.zipfile(“PATH/TO/MY/zip3.zip,'r')

在此,我指定密码短语的长度:
pwd_len=3

在这里,我指定存在多少种可能的字符组合:
all_poss=(我的字母)**pwd_len)

以下是混凝土密码破解程序:

 count = 0
 start_time = time.time()
 for i in range(0,pwd_len+1):   
     for j in map(''.join, itertools.product(myLetters, repeat=i)):
         crack(File, j)  
         count += 1
 print(round((count/all_poss)*100, 1), end='\r')
 res_time = time.time() - start_time
 print("\n--- {} ---".format(round(res_time,2)))
我使用嵌套循环来尝试每个密码。如果成功的话,我会得到成功的信息。否则我应该只看到“不工作”消息

然而

如果我在终端中键入:
python3 pwdCracker.py>>out
我会得到一个长文本文件,其中包含许多“不起作用的消息”,但我也会得到一大堆“成功消息”,尽管只有一条(“bla”)是正确的

这里有一点摘录:

wN did not work.
---- SUCCESS! wO ----
wO did not work.
wP did not work.`
所以很明显“wO”起作用了。。但是为什么呢??我把密码设为“bla”!我真的可以用“wO”打开文件。。。为什么会发生这种情况


希望你能帮忙

我们知道默认的zip加密很弱,我想您会看到散列冲突


大多数加密方法(包括zip文件中使用的加密方法)都需要固定长度的密钥,因此会对密码进行哈希运算以提供该密钥。zip中使用的哈希函数是crc32(指定,尽管它详细说明了不同的攻击),它是为错误检查而设计的,而不是加密哈希。因此,它容易受到此类攻击。

旧的zip格式包含一个检查字节,用于快速验证密码是否正确。根据解密的“解密头”的最后一个字节验证此检查字节

因为检查字节只有一个字节,所以误报的发生非常频繁(1/256)。在这些情况下,bruteforce破解程序通常会对同一存档中的多个文件进行检查(因此使用多个检查字节)

从PkWare的APPNOTE.TXT:

头解密后,缓冲区中的最后1或2个字节应 是被解密文件的CRC的高阶字/字节, 以英特尔低字节/高字节顺序存储。之前的PKZIP版本 2.0使用2字节CRC校验;在2.0之后的版本上使用1字节CRC检查。 这可用于测试提供的密码是否正确


所以你看到的只是误报。

你是说你可以用“bla”和“wO”作为密码打开同一个密码加密的zip文件吗?是的,我试了很多次。。我总是在这样一种情况下结束,即zip文件可以用密码打开,这与我在开始时设置的(“bla”)不同。事实上,有数百个密码被接受。。。也许我用错了zip功能。如果是这样,那就是zip错误,你能链接压缩文件吗?你用了哪个拉链?在哪个操作系统中?另外,从你的输出来看,你得到了“成功”和“不工作”的“wO”是的,我认为你是对的。。。它一定和zip文件有关,我用另一个文件试过了,我已经压缩了,它工作了。。我一定是把最初的zip文件弄错了。。。我正在使用Ubuntu 16.04。