什么是 7z 格式?
7z 格式是 7-Zip 项目于 2000 年推出的开源归档格式(扩展名 .7z),
使用 LZMA / LZMA2 字典压缩算法, 默认支持 AES-256 加密、
固实压缩、自解压包、Unicode 文件名等高级特性, 是目前压缩比最高的通用归档格式之一。
7z 格式的规范完全开放(7z.html),
任何人都可自由实现读写, 无专利费用。 7-Zip 官方提供 LZMA / LZMA2 SDK,
已被 xz、zstd、Python py7zr、Java SevenZipJBinding
等数百个项目广泛使用。
核心特性
1. 高压缩比
使用 LZMA / LZMA2 算法, 7z 在大多数文件类型上(代码、文档、二进制)压缩比领先 ZIP 30-70%, 领先 RAR5 5-10%。 这是因为 LZMA 字典大小可达 4 GB, 而传统 Deflate 限制为 32 KB。
2. 固实压缩 (Solid Compression)
7z 格式默认开启固实压缩——把多个文件视为一个连续数据流进行压缩, 可利用文件间的重复信息, 进一步提升压缩比 5-15%。 在压缩大量小文件时尤为明显。 代价是访问单个文件时需解压整个数据块。
3. AES-256 加密
支持 AES-256 位对称加密, 密钥派生使用 PBKDF2 (HMAC-SHA256, 100000+ 轮),
远超 ZIP 传统的弱 ZipCrypto。 支持加密文件名 (-mhe=on),
无密码无法列出压缩包内任何文件信息。
4. 自解压包 (SFX)
7z 可创建 .exe 格式的自解压包,
接收方无需安装 7-Zip 双击即可解压。 自解压模块可定制图标、版本信息、弹窗文字。
5. Unicode / 多平台
7z 文件头使用 UTF-8 编码, 完整支持任意语言的文件名(中文、日文、emoji)。
在 Linux / macOS 上可通过 p7zip、7zz 完美读写。
LZMA / LZMA2 算法原理
LZMA (Lempel-Ziv-Markov chain Algorithm) 是 Igor Pavlov 于 1998 年设计的字典压缩算法, 是 7z 格式的默认压缩核心。
压缩过程
- 滑动字典匹配: 寻找最近出现过的字节序列 (滑动窗口, 默认 4 MB)。
- 范围编码 (Range Coder): 用概率模型对匹配结果进行算术编码。
- 链式 Markov 模型: 根据字节上下文动态调整概率。
LZMA2 是 LZMA 的改进版, 核心改进是:
- 支持多线程并行压缩 (lzma2 + t* 参数)
- 改善对不可压缩数据的处理 (避免部分坏块导致整包失败)
- 略微提升压缩比 (1-3%)
# 命令行使用 LZMA2 最高压缩
7z a -t7z -m0=lzma2 -mx=9 archive.7z *
# -mx=9 是 7-Zip 预设的「极限压缩」档位
# 字典大小 = 1536 MB, 线程 = 2 (单文件)
文件结构
7z 文件由 Signature Header + 多个 Streams 组成, 总体结构如下:
┌──────────────────────────────────────┐
│ Signature Header (32 字节) │ 固定签名: 0x37 0x7A 0xBC 0xAF 0x27 0x1C
│ - 6 字节魔数 0x37 0x7A 0xBC 0xAF 0x27 0x1C │
│ - 2 字节版本 (0x00 0x04) │
│ - 4 字节 StartHeader CRC32 │
├──────────────────────────────────────┤
│ Packed Streams (压缩数据流) │ 可包含若干个 Coder
│ - Coder 1: LZMA2 (deflate) │
│ - Coder 2: AES-256 (encrypt) │ 可选
├──────────────────────────────────────┤
│ Files Information (文件元数据) │ 名称、时间、属性、CRC
├──────────────────────────────────────┤
│ End Header (结束头) │ 24 字节
│ - StartHeader 偏移 │
│ - StartHeader CRC32 │
│ - 下一条可选 Header 偏移 (0) │
└──────────────────────────────────────┘
关键设计: 7z 文件不存储未压缩大小(避免 4GB 限制), 流式解码在解压时实时计算。 这也是 7z 能支持超大文件与流式解压的原因。
7z vs ZIP vs RAR 详细对比
| 对比项 | 7z (LZMA2) | ZIP (Deflate) | RAR5 |
|---|---|---|---|
| 压缩算法 | LZMA2 | Deflate / Deflate64 | RAR 专有算法 |
| 字典大小 | 4 KB ~ 4 GB | 32 KB | 4 MB ~ 1 GB |
| 典型压缩比 | 30% - 40% | 50% - 60% | 35% - 45% |
| 加密算法 | AES-256 | ZipCrypto (弱) / AES-256 | AES-256 |
| 加密文件名 | ✓ | ✗ (普通 ZIP) | ✓ |
| 固实压缩 | ✓ (默认) | ✗ | ✓ |
| 自解压 | ✓ | ✗ | ✓ |
| 分卷压缩 | ✓ | 部分 | ✓ |
| Unicode 文件名 | ✓ (UTF-8) | ✓ (UTF-8 flag) | ✓ |
| 开源 | ✓ LGPL | 规范开放 / 实现多样 | ✗ 专有 |
| Windows 资源管理器原生 | ✗ (需安装) | ✓ | ✗ |
| 解压速度 | 中 | 快 | 中 |
推荐使用场景
- 长期归档 / 备份: 7z 压缩比最高, 节省存储空间。
- 代码包发布: GitHub Release、npm 包源、conda 等推荐 .tar.gz 或 .7z。
- 加密敏感数据: AES-256 + 加密文件名, 满足金融级合规。
- 大文件传输: 分卷压缩 + 断点续传, 比单大文件更稳定。
不推荐使用
- 需给对方却没有 7-Zip 的场景 (此时选 ZIP 更通用)
- 服务器实时流式解压 (ZIP 更快)
- 要嵌入 Office / PDF 文档 (需 ZIP)
命令行速查
# 1. 创建 7z 压缩包
7z a archive.7z file1.txt dir/
# 2. 解压到当前目录
7z x archive.7z
# 3. 解压到指定目录
7z x archive.7z -oC:\output
# 4. 加密压缩 (AES-256, 含文件名)
7z a -p -mhe=on secret.7z *.pdf
# 5. 分卷压缩 (每卷 100 MB)
7z a -v100m big.7z bigfile.iso
# 6. 查看压缩包内容
7z l archive.7z
# 7. 校验压缩包完整性
7z t archive.7z
# 8. 创建自解压包
7z a -sfx7z.sfx installer.exe program_files/
# 9. 极限压缩 (字典 1.5 GB, 慢但最小)
7z a -t7z -mx=9 -md=1536m archive.7z *
常见问题
7z 文件能压缩到比 ZIP 小很多吗?
能, 但并非对所有文件都有效。 对于文本、代码、数据库等高度冗余的数据, 7z 普遍领先 ZIP 30-70%。 对于已经压缩过的格式(JPG、MP4、ZIP 本身), 7z 与 ZIP 几乎相同, 不会再缩小。
7z 文件是否安全?
7z 格式本身仅是归档容器, 安全性由加密算法决定。 7z 使用 AES-256 (256 位密钥) 至今未被破解。 但弱密码仍然易受字典攻击, 建议使用 12+ 字符的随机密码或密码管理器生成。
7z 与 zip.7z 有什么区别?
没有这种格式。 文件扩展名末尾的 .zip、.7z 只是扩展名标识,
7-Zip 根据内容而非扩展名识别格式。 修改扩展名不会改变文件性质。
📦 想立即体验 7z 的极致压缩比? 前往 下载页 获取 7-Zip 24.09 (百度网盘 提取码 8888)。