Python解压缩AES-128加密文件

时间:2013-03-21 16:36:34

标签: python zip aes zipfile

有没有办法直接用python解压缩AES-128加密文件,因为ZipFile会抛出Bad Password错误。如果我使用7zip它是有效的,所以密码是正确的,但是再次需要安装7zip作为依赖。

我尝试了什么:

from ZipFile import ZipFile
zip = ZipFile('test.zip')
zip.extractall(pwd='password')

这会抛出Bad Password异常。

使用7zip检查文件

7z l -slt test.zip

返回:

Encrypted = +
Method = pkAES-128 Deflate

2 个答案:

答案 0 :(得分:5)

Python标准库中的zipfile模块仅支持CRC32加密的zip文件(请参阅此处:http://hg.python.org/cpython/file/71adf21421d9/Lib/zipfile.py#l420)。所以,没有办法绕过某些第三方依赖。

最简单的方法是只使用标准库中的7z模块安装7zip并调用命令行实用程序subprocess

import subprocess
subprocess.call(["7z", "x", "-ppassword", "test.zip"])

另一个选项是python模块“PyLzma”,它也可以处理AES加密的7zip档案:https://github.com/fancycode/pylzma。它不直接支持解密经典的zip文件,但您可以使用它的例程来编写自己的解压缩函数。

答案 1 :(得分:1)

您可以使用库 pyzipper https://github.com/danifus/pyzipper。它的工作原理与Python的zipfile相同:

import pyzipper

with pyzipper.AESZipFile('my_archive.zip') as f:
    f.pwd = b'myPassword'
    print(f.infolist())
    file_content = f.read('testfile.txt')