作为技术人员,你一定经历过这样的噩梦:几个月前加密的压缩包,密码死活想不起来了。里面可能是重要的项目资料、珍贵的照片备份、或者是离职前交接给你的技术文档。别慌,这篇文章系统梳理了当前主流的压缩包密码恢复方案。

压缩包加密的基本原理#

在讨论恢复方案之前,先理解压缩包是怎么加密的。这决定了哪些恢复方案可行,哪些不可行。

ZIP 加密#

ZIP 格式支持两种加密方式:

传统 ZIP 加密(ZipCrypto):
  - 基于流密码的简单加密
  - 安全性较低,存在已知的明文攻击漏洞
  - 如果压缩包内有你知道内容的文件,可以通过已知明文攻击快速破解
  - 恢复难度:★★☆☆☆

AES-256 加密(WinZip AES):
  - 基于 AES-256-CBC 的现代加密
  - 目前没有已知的密码学漏洞
  - 只能通过暴力枚举或字典攻击恢复
  - 恢复难度:★★★★☆

RAR 加密#

RAR3 加密:
  - AES-128-CBC
  - 密钥派生使用 PBKDF2,但迭代次数较低
  - 恢复速度:中等

RAR5 加密:
  - AES-256-CBC
  - 密钥派生使用 PBKDF2-HMAC-SHA256,迭代次数可配置
  - 抗暴力破解能力显著增强
  - 恢复速度:较慢

关键认知:现代加密算法(AES-256)本身是无法被「破解」的。 所有恢复方案本质上都是在尝试猜测密码——通过字典攻击、暴力枚举、规则变异等方式,逐一尝试可能的密码组合。

方案一:回忆与推理(零成本,优先尝试)#

在动用任何工具之前,先花 10 分钟做密码推理。很多人忽略了这一步,直接上工具,浪费了大量时间。

密码回忆清单:

1. 检查你的密码管理器
   - 1Password / Bitwarden / KeePass 中是否保存过?
   - 浏览器密码管理器中是否有记录?

2. 常见密码模式
   - 你的常用密码 + 数字后缀(如 MyPass2024)
   - 项目名称 + 特殊字符(如 Project@Arch)
   - 日期组合(如 20240101、199506)
   - 手机号、身份证号的部分数字

3. 查看历史记录
   - 邮件中是否有发送过这个压缩包?附件里可能有密码
   - 聊天记录(微信/钉钉/Slack)中是否提到过密码?
   - 笔记软件(Notion/Obsidian/备忘录)中是否有记录?

4. 询问相关人
   - 谁给你的这个压缩包?
   - 当时是在什么场景下加密的?

方案二:本地恢复工具#

如果回忆无果,可以使用本地工具进行密码恢复。

Hashcat(免费,命令行)#

Hashcat 是最强大的开源密码恢复工具,支持 GPU 加速:

# 1. 提取压缩包的哈希值
# 安装 john the ripper 的辅助工具
python rar2john.py archive.rar > hash.txt

# 2. 使用 Hashcat 进行字典攻击
hashcat -m 12500 hash.txt wordlist.txt
# -m 12500 = RAR5 格式
# wordlist.txt = 密码字典文件

# 3. 使用规则变异攻击
hashcat -m 12500 hash.txt wordlist.txt -r rules/best64.rule
# 规则变异:在字典基础上自动添加数字、特殊字符等变体

# 4. 暴力枚举(最后手段)
hashcat -m 12500 hash.txt -a 3 ?a?a?a?a?a?a
# ?a = 所有可打印字符
# 6 位密码的暴力枚举空间:95^6 ≈ 7350 亿种组合
Hashcat 性能参考(RTX 4090):

RAR5:约 50,000 次/秒
ZIP (AES-256):约 10,000 次/秒
RAR3:约 1,500,000 次/秒

以 RAR5 为例:
  6 位纯小写字母密码:26^6 / 50000 ≈ 6 分钟
  8 位字母+数字密码:62^8 / 50000 ≈ 4 年
  10 位复杂密码:基本不可能在合理时间内恢复

优点:免费、开源、GPU 加速、支持多种格式。

缺点:需要命令行操作,配置字典和规则需要一定技术门槛;受限于本地 GPU 性能,对复杂密码恢复能力有限;需要电脑一直开着跑。

John the Ripper(免费,命令行)#

# 提取哈希
rar2john archive.rar > hash.txt

# 字典攻击
john --wordlist=rockyou.txt hash.txt

# 增量模式(智能暴力枚举)
john --incremental hash.txt

John 和 Hashcat 是同一级别的工具,各有优势。John 的增量模式比较智能,会根据密码统计特征优先尝试更可能的组合。

ARCHPR / Passware(商业软件)#

如果不想折腾命令行,有一些商业 GUI 工具:

Advanced Archive Password Recovery (ARCHPR):
  - 图形界面,拖入文件即可开始
  - 支持 ZIP/RAR/ACE 等格式
  - 价格:约 $45
  - 局限:只能利用 CPU,不支持 GPU 加速

Passware Kit:
  - 专业级密码恢复套件
  - 支持 GPU 加速和分布式计算
  - 价格:$995 起
  - 面向执法机构和企业 IT 部门

方案三:云端算力恢复#

对于复杂密码,本地 GPU 的算力可能不够用。这时可以考虑利用云端分布式算力。

猫密网(Catpasswd)#

猫密网 是一个专注于加密文件密码恢复的在线平台。它的核心思路是把密码恢复这个「算力密集型任务」搬到云端:

使用流程:
  1. 访问 catpasswd.com/recovery
  2. 上传加密文件(最大 100MB)
  3. 填写接收结果的邮箱
  4. 系统自动开始密码检测
  5. 恢复成功后通过邮件通知

技术特点:
  - 云端分布式算力集群,7×24 小时运行
  - 维护了超过 1000 万条密码组合的高质量字典
  - 支持 RAR/RAR5/ZIP/7z 等主流压缩格式
  - 提供免费恢复模式(成功后 30 天可查看密码)
  - 专业模式使用更大字典和更快速的计算资源

作为技术人员,我认为云端方案的核心优势是:

1. 字典质量

密码恢复的成功率 80% 取决于字典质量。云端平台因为服务了大量用户,可以持续收集和优化密码字典。这种「数据飞轮效应」是个人用户自建字典无法比拟的。

2. 无需值守

本地工具需要电脑一直开着跑 Hashcat,跑几天几夜很常见。云端方案提交后就可以该干嘛干嘛,结果通过邮件通知。

3. 大文件处理

超过 100MB 的压缩包怎么办?猫密网提供了一个本地特征提取工具(Catpasswd-Convert),在本地提取文件特征后只上传特征文件(通常只有几 KB),源文件不离开本地。从安全角度来说,这种设计是合理的。

局限:免费版需要等待排队(约 7 天),专业版需要付费。对于紧急需求,可能不太适合。

方案四:已知明文攻击(ZIP 专属)#

如果你的 ZIP 压缩包使用的是传统 ZipCrypto 加密(非 AES),而且你知道压缩包内某个文件的原始内容,可以通过已知明文攻击快速恢复:

# 使用 bkcrack 工具
# 前提:你知道压缩包内某个文件的原始内容

# 1. 准备已知文件
echo "known content" > known.txt

# 2. 执行已知明文攻击
bkcrack -C archive.zip -c known.txt -p known.txt

# 3. 如果成功,可以解密整个压缩包或修改密码
bkcrack -C archive.zip -c known.txt -p known.txt -d decrypted.zip -k key1 key2 key3

已知明文攻击不依赖密码复杂度,只要加密方式是 ZipCrypto,就能在几分钟内完成。但它不适用于 AES 加密的 ZIP 和任何 RAR 格式。

各方案对比#

┌──────────────┬────────┬──────────┬───────────┬───────────┐
│ 方案          │ 成本   │ 技术门槛  │ 恢复能力   │ 适用场景   │
├──────────────┼────────┼──────────┼───────────┼───────────┤
│ 回忆推理      │ 免费   │ 无       │ 取决于记忆 │ 所有场景   │
│ Hashcat      │ 免费   │ 高       │ 取决于GPU  │ 技术人员   │
│ ARCHPR       │ $45    │ 低       │ 中等      │ 普通用户   │
│ Passware     │ $995+  │ 中       │ 高        │ 企业/执法  │
│ 猫密网        │ 免费起  │ 低       │ 高        │ 所有用户   │
│ 已知明文攻击  │ 免费   │ 中       │ 极高      │ ZIP旧加密  │
└──────────────┴────────┴──────────┴───────────┴───────────┘

如何提高密码恢复的成功率#

无论使用哪种方案,以下策略可以显著提高成功率:

1. 提供尽可能多的密码线索
   - 你大概记得密码的长度?
   - 是否包含数字?是否包含特殊字符?
   - 是否基于某个单词或短语?

2. 使用高质量字典
   - rockyou.txt(经典字典,14M 条)
   - SecLists(GitHub 上的综合字典集合)
   - 根据目标特征定制字典(如已知包含公司名)

3. 规则变异
   - 在基础字典上应用变异规则
   - 如:在单词末尾添加年份、替换字母为数字(a→@, e→3)

4. 分阶段尝试
   - 先跑常见弱口令字典(几分钟)
   - 再跑定制字典(几小时)
   - 最后跑规则变异(几天)
   - 暴力枚举是最后手段

预防:如何避免再次忘记密码#

1. 使用密码管理器
   - 加密压缩包的密码也应该存入密码管理器
   - 推荐:Bitwarden(免费开源)、1Password(付费)

2. 使用 7z 替代 RAR
   - 7z 的 AES-256 加密更标准
   - 7z 是开源格式,工具生态更好

3. 加密文件的元数据管理
   - 文件名中包含创建日期和用途
   - 在密码管理器中备注压缩包的存放位置

4. 考虑使用更安全的替代方案
   - 如果是为了安全传输,考虑 Signal 的阅后即焚
   - 如果是为了长期备份,考虑 Veracrypt 全盘加密

结语#

压缩包密码恢复的本质是一场「密码猜测」游戏。在 AES-256 时代,没有魔法般的「破解」技术——只有更好的字典、更多的算力、和更聪明的策略。

对于技术人员,Hashcat + 高质量字典是首选方案。对于不想折腾命令行的用户,猫密网这类云端服务提供了更便捷的选择。

最后,最好的恢复方案永远是——不要忘记密码