如何在 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 中解压缩文件