如何用Python3解压非PKZIP算法加密的密码保护Zip文件?
解决Python解压AES加密Zip包的密码错误问题
嘿,这个坑很多人都踩过!你用Ubuntu归档管理器创建的加密Zip包,默认用的是AES加密算法,但Python标准库的zipfile模块只支持老旧的ZipCrypto加密——这俩完全不兼容,所以哪怕你密码输对了,也会被判定成“密码错误”。
下面给你两个靠谱的解决方案:
方案一:用pyzipper库(最推荐,纯Python实现)
pyzipper是zipfile的增强版,专门加了AES加密解密的支持,用法和原生zipfile几乎一模一样,不用改太多代码:
- 先安装库:
pip install pyzipper
- 修改你的代码,替换成pyzipper就行:
import pyzipper # 用with语句更安全,自动关闭文件 with pyzipper.ZipFile('archive.zip') as zip_file: zip_file.extractall(pwd=b'1') # 密码还是传bytes类型,和原来一样
方案二:调用7-Zip命令行(适合不想装Python库的场景)
如果你的Ubuntu已经装了p7zip-full(没装的话用sudo apt install p7zip-full装一下),可以直接通过Python调用7-Zip来解压,它完美支持AES加密:
import subprocess # 执行7-Zip解压命令,参数解释: # x = 解压文件;-p1 = 密码是1;-o. = 解压到当前目录;-y = 自动确认覆盖 subprocess.run( ['7z', 'x', 'archive.zip', '-p1', '-o.', '-y'], check=True # 如果命令执行失败会抛出异常 )
额外小提示
- 要是你用原生
zipfile能解压成功的加密Zip,那它肯定是用ZipCrypto算法创建的(比如Windows自带的压缩工具),但这种算法安全性很差,现在主流工具默认都用AES了。 - pyzipper还能创建AES加密的Zip包,要是以后需要的话,只要在创建时指定
encryption=pyzipper.WZ_AES参数就行。
内容的提问来源于stack exchange,提问作者ikudyk
相关产品推荐
相关产品推荐

