是否存在带数据描述符且采用ZIP弱加密机制的密码保护压缩包?
结论
存在符合要求的合法ZIP文件,这种组合完全符合PKWARE发布的ZIP格式规范,且在实际生产环境中广泛存在。
规范依据
- Zip传统弱加密(即ZipCrypto加密)是ZIP规范原生支持的加密机制,和数据描述符特性无互斥限制。
- 数据描述符的设计目标就是适配流式生成ZIP的场景:生成压缩包时无需提前计算CRC、压缩后大小、未压缩大小,这三个字段会存储在对应文件的压缩数据末尾,而非本地文件头中。
- 常见的动态加密ZIP生成场景(比如web服务实时导出加密压缩包、压缩工具选择流式压缩+加密选项)都会生成这类结构的文件。
流式解密开发适配方案
你遇到的无法提前获取压缩大小的问题,可以通过调整流式处理逻辑解决:
- ZipCrypto加密的数据流支持逐块解密,解密逻辑仅和前12字节加密头、以及逐字节生成的密钥流相关,不需要提前获知完整压缩数据的大小。
- 调整压缩数据结束位置的识别逻辑,不依赖本地文件头的大小字段:
- 逐块解密压缩数据的同时,维护一个4字节的滑动窗口,匹配数据描述符的固定签名
0x08074b50。 - 匹配到签名后,读取后续12字节(依次为CRC32、压缩大小、未压缩大小,各占4字节),将解密过程中计算得到的CRC和该字段校验一致,即可确认压缩数据段结束。
- 逐块解密压缩数据的同时,维护一个4字节的滑动窗口,匹配数据描述符的固定签名
Python实现注意事项
- Python标准库
zipfile模块默认优先读取本地文件头的大小字段,无法直接处理这类带数据描述符的加密ZIP,需要自行实现底层的结构解析逻辑。 - ZipCrypto的加解密算法逻辑公开,逐块处理的性能完全满足流式解压的需求。
内容的提问来源于stack exchange,提问作者Michal Charemza
相关产品推荐
相关产品推荐

