无法使用 python zipfile 库解压缩带有密码的 .zip 文件
Posted
技术标签:
【中文标题】无法使用 python zipfile 库解压缩带有密码的 .zip 文件【英文标题】:Unable to unzip a .zip file with a password with python zipfile library 【发布时间】:2020-05-30 18:44:05 【问题描述】:我使用 Gnome Archive Manager (Ubuntu OS) 创建了一个 zip 文件。我使用密码创建了 zip 文件,并尝试使用 zipfile
Python 库解压缩它:
import zipfile
file_name = '/home/mahmoud/Desktop/tester.zip'
pswd = 'pass'
with zipfile.ZipFile(file_name, 'r') as zf:
zf.printdir()
zf.extractall(path='/home/mahmoud/Desktop/testfolder', pwd = bytes(pswd, 'utf-8'))
当我运行此代码时,我收到以下错误,我很确定密码是正确的。错误是:
File "/home/mahmoud/anaconda3/lib/python3.7/zipfile.py", line 1538, in open
raise RuntimeError("Bad password for file %r" % name)
RuntimeError: Bad password for file <ZipInfo filename='NegSkew.pdf' compress_type=99 filemode='-rw-rw-r--' external_attr=0x8020 file_size=233252 compress_size=199427>
如何解压文件?
【问题讨论】:
我试过你的代码,它对我有用,你能用另一个密码相同的程序解压吗? 为什么文件名在异常'NegSkew.pdf'中? 我尝试用 winrar 和 7z 解压缩文件,都运行良好,密码正确所有这些都是在 Windows 机器上完成的@NicoMüller 嗯。这是一个有趣的问题,我能够重现您的观察结果。我在带有 Python 3.7.5 的 Ubuntu 18.04.4 LTS 上运行。我制作了一个简单的文本文件,在 Gnome 存档管理器中对其进行压缩和加密。和你一样,当我尝试执行extractall
时,我看到的是Bad password for file <ZipInfo filename='sample.txt' ...>
。这肯定会得到我的支持,我会稍微戳一下。我倾向于认为 Python 的内置 ZIP 库可能不支持 Gnome 的存档管理器使用的加密算法,但我还没有任何东西可以备份。
@liorr 异常显示要从 zip 中提取的文件的名称
【参考方案1】:
zipfile
库不支持 AES 加密 (compress_type=99),仅支持_ZipDecrypter
代码 (https://hg.python.org/cpython/file/a80c14ace927/Lib/zipfile.py#l508) 中提到的 CRC-32。 _ZipDecrypter
在 ZipFile.open 中引发特定 RuntimeError 之前被调用和使用,可以从 extractall
跟踪。
您可以使用pyzipper
库(https://github.com/danifus/pyzipper)代替zipfile
来解压文件:
import pyzipper
file_name = '/home/mahmoud/Desktop/tester.zip'
pswd = 'pass'
with pyzipper.AESZipFile(file_name) as zf:
zf.extractall(path='/home/mahmoud/Desktop/testfolder', pwd = bytes(pswd, 'utf-8'))
【讨论】:
以上是关于无法使用 python zipfile 库解压缩带有密码的 .zip 文件的主要内容,如果未能解决你的问题,请参考以下文章