You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从HTTP响应判断下载的zip文件是否设有密码保护

如何通过HTTP响应内容判断ZIP文件是否设置密码保护

HTTP 响应头部不包含 ZIP 文件是否加密的相关元数据,仅扫描头部无法完成判断,必须读取响应体的二进制内容解析 ZIP 标准结构实现判断,具体操作如下:

操作步骤

  • 不需要下载完整ZIP文件,仅请求响应体前128字节即可完成基础判断,大幅节省带宽
  • 先校验ZIP文件签名:标准ZIP的本地文件头前4字节为固定值0x504B0304(二进制为b'PK\x03\x04'),如果匹配则确认是有效ZIP格式
  • 读取偏移量为6的2个字节(小端序),得到ZIP的通用位标记
  • 检查通用位标记的最低位(第0位):如果该位为1,说明当前读取的压缩项是加密状态,绝大多数场景下只要有一个压缩项加密,整个ZIP包就属于密码保护的压缩包。如果需要确认全量文件是否都加密,遍历所有本地文件头逐个检查通用位标记即可
  • AES加密的ZIP格式同样适配该规则,除了第0位置1外第6位也会被置1,不影响加密状态的判断

代码示例(Python)

import requests

def is_zip_encrypted(url: str) -> bool:
    # 仅请求前128字节,足够读取核心头部信息
    resp = requests.get(url, headers={"Range": "bytes=0-127"}, stream=True)
    content = resp.content
    # 校验是否为有效ZIP格式
    if len(content) < 10 or content[:4] != b'PK\x03\x04':
        raise ValueError("目标文件不是有效ZIP格式")
    # 读取通用位标记,小端序解析
    general_flag = int.from_bytes(content[6:8], byteorder="little")
    # 第0位为1代表加密
    return (general_flag & 1) == 1

注意事项

  • 分卷压缩ZIP、自解压EXE格式ZIP的头部结构有差异,需要适配对应格式的规则再判断
  • 部分恶意修改过头部的ZIP包可能出现标记位和实际加密状态不符的情况,可多校验2-3个压缩项的通用位标记降低误判概率

内容的提问来源于stack exchange,提问作者Jérôme D'hulst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:54:01