不支持 Python Zipfile 压缩方法

Posted

技术标签:

【中文标题】不支持 Python Zipfile 压缩方法【英文标题】:Python Zipfile compression method is not supported 【发布时间】:2020-07-05 09:23:09 【问题描述】:

编辑:

这工作的时候是我使用 ZIPCrypto 压缩的时候。 AES-256 失败了。请问如何解决这个问题?

这快把我逼疯了。

我之前使用以下 Python 代码成功打开了使用 7-Zip 创建的受密码保护的 .zip 文件:

import zipfile

zip_file = zipfile.ZipFile('crack_me.zip')
output_verbose = 1  # increase that for long password list
with open('passwords.txt', 'rb') as password_list:
    for index, line in enumerate(password_list):
        try:
            pwd = line.strip(b'\r\n')
            zip_file.extractall(pwd=pwd)
        except RuntimeError as e:
            print(e)
            if index % output_verbose == 0:
                print('. The  word not matched.'.format(index + 1, pwd))
        else:
            print('. Wow ! found the password: '.format(index + 1, pwd))
            break

zip_file.close()

但是,由于无法理解的原因,它在多次尝试中只成功了几次。大多数情况下会给出“不支持该压缩方法”的例外情况。

我尝试删除、重命名、重新创建 .zip 文件,但没有成功。对我来说,它偶尔会起作用是没有意义的。

我试图将问题简化如下:

import zipfile

zip_file = zipfile.ZipFile('crack_me.zip')
try:
    zip_file.extractall(pwd=b"password")
    print('Opened')
except RuntimeError as e:
    print(e)

但我得到了同样的例外。我尝试过 pwd 的变体,例如 bytes("password", "utf-8) 等。

使用 7-Zip 打开时,提供的密码会打开 .zip 文件。

请问这是怎么回事?

【问题讨论】:

相关***.com/questions/32797851/… 您能否提供您可能已传递给 7z 的确切命令行参数,您使用该参数创建了 zip 文件?如果您没有明确指定标准 zip 方法(即传递-tzip 标志),Python 的zipfile 模块将无法打开它。 也相关***.com/questions/31743127/… 已编辑:使用 AES-256 失败。请问如何解决这个问题? 也许试试 pyzipper? 【参考方案1】:

尝试使用pyzipper。这是一个示例脚本:

import pyzipper


password = 'abc'

with pyzipper.AESZipFile('yourdocument.zip', 'r', compression=pyzipper.ZIP_DEFLATED, encryption=pyzipper.WZ_AES) as extracted_zip:
    extracted_zip.extractall(pwd=str.encode(password))

【讨论】:

谢谢!!这解决了我的问题,似乎 zipfile 的解密编码只支持字节。 pyzipper 更强大,可以解密 hashcoed。【参考方案2】:

为了使 zipfile 库在受密码保护的 zip 上工作,您需要在设置密码时勾选“Zip legacy encryption”选项。

【讨论】:

以上是关于不支持 Python Zipfile 压缩方法的主要内容,如果未能解决你的问题,请参考以下文章

Python zipfile 模块不压缩文件

python怎样压缩和解压缩ZIP文件

Python 压缩文件处理 zipfile & tarfile

Python实现批量压缩文件/文件夹——zipfile

打开不支持的压缩类型的 zipfile 静默返回空文件流,而不是抛出异常

Python 解压缩文件详解