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

时间:2018-05-04 07:13:49

标签: python python-3.x ubuntu encryption zip

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

首先,我使用标准的Ubuntu Archive Manager 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>)

当我运行Archive Manager进行解压缩时,它运行正常。但是,一旦我尝试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而档案管理员通常更喜欢AES加密(并且有一个很好的安全理由)。

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

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

1 个答案:

答案 0 :(得分:0)

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