zipfile模块不支持AES加密,仅支持弱效的传统ZIP 2.0加密;真正安全需用pyminizip或subprocess调用7z实现AES-256加密。

zipfile不支持AES加密,只能用传统ZIP 2.0加密
Python标准库的 zipfile 模块**无法生成AES加密的ZIP文件**,它只支持旧式的“ZIP 2.0 encryption”(也叫CRC-based encryption),这种加密强度极弱,密码可被轻易暴力破解或直接绕过。如果你看到某些教程声称用 setpassword() 就能安全加密,那是严重误导。
真正需要保护敏感数据时,必须换方案。但如果你只是应付内部简单场景(比如防同事随手双击打开),可以临时用传统加密,前提是明确接受其风险。
-
ZipFile.write()本身不处理密码;必须用ZipFile.writestr()配合ZipInfo手动设置encrypt()标志 - 密码必须是 bytes 类型,比如
b"mypassword",传 str 会报TypeError - 压缩级别设为
ZIP_DEFLATED时,加密仍生效;但部分老旧解压工具可能拒绝解密已压缩的条目
用writestr + ZipInfo实现传统加密的最小可行代码
以下代码能生成一个带密码的ZIP,但请再次注意:这不等于安全。
import zipfile
from zipfile import ZipInfo
<p>with zipfile.ZipFile("secret.zip", "w") as zf:</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/00968c3c2c15" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">Python免费学习笔记(深入)</a>”;</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/skill12569" title="Biopython"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20e695c2374.jpg" alt="Biopython" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/skill12569" title="Biopython">Biopython</a>
<p>全面的分子生物学工具集。适用于序列操作、文件解析(FASTA/GenBank/PDB)、系统发育分析,以及通过 Bio.Entrez 以编程方式访问 NCBI/</p>
</div>
<a href="/xiazai/skill12569" title="Biopython" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div><h1>构造ZipInfo对象并标记为加密</h1><pre class='brush:python;toolbar:false;'>info = ZipInfo("sensitive.txt")
info.compress_type = zipfile.ZIP_DEFLATED
info.flag_bits |= 0x1 # 设置加密标志位
# 写入内容并指定密码(bytes!)
zf.writestr(info, "confidential data here", pwd=b"123456")验证是否生效:用系统自带解压工具打开 secret.zip,会提示输入密码;用 unzip -P 123456 secret.zip 可无提示解压(Linux/macOS)。但用 fcrackzip 几秒就能爆破出密码。
真正安全的替代方案:用pyminizip或7z命令行
要 AES-256 加密,必须跳出 zipfile。两个靠谱选择:
-
pyminizip:纯Python封装,支持 AES,安装后一行调用:pyminizip.compress("data.txt", "", "safe.zip", "pwd123", 5)(注意密码是 str) -
subprocess调用 7-Zip(推荐):Windows 用"7z.exe a -p123456 -mem=AES256 safe.zip data.txt",macOS/Linux 用7z a -p123456 -mem=AES256 safe.zip data.txt。7z 格式比 ZIP 更可靠,且 AES 密码不可绕过
别试图给 zipfile 打补丁——它的底层 C 实现没暴露 AES 接口,所有“增强版 zipfile”都是重新封装 libzip 或 7z 的轮子。
解压加密ZIP时常见错误和绕过点
即使你用了传统加密,解压端也容易出问题:
- 用
ZipFile.extractall(pwd=...)解密时,密码必须和打包时完全一致(包括类型、空格、大小写),且pwd参数只对传统加密有效,对 AES ZIP 直接抛RuntimeError: File is encrypted - Mac 上归档实用工具默认不支持传统加密解密;Windows 资源管理器有时会静默跳过加密文件
- 最危险的是:传统加密的 ZIP 文件头不加密,文件名、大小、时间戳全明文可见——攻击者根本不用密码就能知道里面有什么
真正敏感的数据,加密只是第一步;文件名泄露、临时文件残留、内存中明文驻留,这些环节比 ZIP 密码本身更常被忽略。

















