我想用Python 3解压缩受密码保护的档案。我知道密码,但是在zip标准中似乎有几种加密算法。
首先,我使用密码“ 1”使用标准Ubuntu的Archive Manager 3.16.5创建一个zip存档。然后我运行以下代码:
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
以后?
我考虑过7zip
在bash调用中使用,但是它与操作系统的交互带来了更多的问题(如果执行的计算机没有一个,该怎么办?)。我还查找了libarchive
Python 3(即python3-libarchive-c
软件包)的端口-它是与C实现分开开发的,并且目前不支持加密/解密。
您可以使用pyzipper库解压缩AES加密的zip文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句