如何在 Python3 中解压缩使用 PKZIP 以外的算法加密的文件?

Posted

技术标签:

【中文标题】如何在 Python3 中解压缩使用 PKZIP 以外的算法加密的文件?【英文标题】:How can I unzip file encrypted with algorithm other than PKZIP in Python3? 【发布时间】:2018-05-04 07:13:48 【问题描述】:

我想用 Python 3 解压缩受密码保护的档案。我知道密码,但似乎 zip 标准中有几种加密算法。

首先,我使用标准 Ubuntu 的存档管理器 3.16.5 创建一个 zip 存档,使用密码“1”。然后我运行以下代码:

import zipfile

zip_file = zipfile.ZipFile('archive.zip')
zip_file.extractall(pwd=b'1')

结果,我得到了RuntimeError: ('Bad password for file', <ZipInfo filename='contents.txt' compress_type=99 filemode='-rw-rw-r--' external_attr=0x8020 file_size=40 compress_size=60>)

当我运行存档管理器进行解压缩时,它工作正常。但是,一旦我尝试unzip,它就无法完成这项工作:

$ unzip -P 1 archive.zip 
Archive:  archive.zip
    skipping: contents.txt            need PK compat. v5.1 (can do v4.6)

据我了解,问题在于unzip 使用PKZIP 算法,而libarchive 广泛使用7zip 和Archive Manager 通常更喜欢AES 进行加密(并且有很好的安全理由)。

那么,我该如何选择 Python 中的解压算法呢?或者我应该不关心 zip 格式本身并找到任何 AES 解密器,然后以某种方式将其连接到 unzip

我曾考虑在 bash 调用中使用 7zip,但它在与操作系统的交互方面带来了更多问题(如果执行机器没有呢?)。我还查找了libarchive 到 Python 3 的端口(即python3-libarchive-c 包)——它是与 C 实现分开开发的,并且不支持今天的加密/解密。

【问题讨论】:

【参考方案1】:

您可以使用 pyzipper 库来解压缩 AES 加密的 zip 文件。

【讨论】:

以上是关于如何在 Python3 中解压缩使用 PKZIP 以外的算法加密的文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用内部 Windows XP 选项在 VBScript 中解压缩文件

如何使用 Azure Function 在 Azure 文件共享中解压缩文件?

如何在swift中解压缩带有密码的json文件?

如何在 PHP 中解压缩二进制字符串?

Python:如何在 for 中解压缩多个值?

如何在 C# 中解压缩多层 zip 文件