Word/Excel 文档加密密码恢复:从原理到实战
前两天帮一位做财务的朋友恢复了一个加密的 Excel 文件密码——那里面存着三年的税务数据,密码忘了但文件又不能丢。Office 文档的加密机制和压缩包完全不同,恢复策略也有很大差异。这篇文章把 Office 文档密码恢复的技术原理和实战方案完整梳理一遍。
Office 文档的加密演进#
Office 文档的加密方案随着版本迭代发生了很大变化。了解加密版本是选择恢复方案的前提。
Office 97-2003(.doc / .xls / .ppt):
加密方式:RC4(40-bit 密钥)
安全性:极弱
恢复难度:★☆☆☆☆
说明:40-bit 密钥空间只有 2^40 ≈ 1 万亿种组合,现代 GPU 几小时即可穷举
Office 2007(.docx / .xlsx / .pptx):
加密方式:AES-128 + SHA-1
密钥派生:PBKDF2,迭代 50,000 次
安全性:中等
恢复难度:★★★☆☆
说明:迭代次数显著增加了暴力破解的难度
Office 2010:
加密方式:AES-128 + SHA-1
密钥派生:PBKDF2,迭代 100,000 次
安全性:中等偏上
恢复难度:★★★☆☆
Office 2013-2021 / Microsoft 365:
加密方式:AES-256 + SHA-512
密钥派生:PBKDF2,迭代 100,000 次(可配置到 1,000,000)
安全性:强
恢复难度:★★★★☆
说明:AES-256 + 高迭代次数,对暴力破解有很强的抵抗力
查看你的文档使用的加密版本#
# 使用 msoffcrypto-tool 查看加密信息
import msoffcrypto
with open('encrypted.xlsx', 'rb') as f:
file = msoffcrypto.OfficeFile(f)
print(f"加密类型: {file.file_type}")
print(f"密钥大小: {file.keyTypes}")
# 或者使用命令行:
# msoffcrypto-tool -t encrypted.xlsx
Office 的两种「加密」:别搞混了#
很多用户混淆了 Office 的两种保护机制:
1. 文档加密(Encrypt with Password)
作用:打开文件时需要输入密码
加密范围:整个文件内容都被加密
恢复方式:必须恢复密码才能查看内容
2. 工作表保护 / 编辑限制(Protect Sheet / Restrict Editing)
作用:可以查看文件,但不能编辑
加密范围:只锁定编辑功能
恢复方式:可以通过修改 XML 结构绕过(见下文)
工作表保护:无需密码即可解除#
如果你的文件只是被「保护工作表」锁住了(可以查看但不能编辑),不需要恢复密码:
# 步骤 1:将 .xlsx 文件重命名为 .zip
cp protected.xlsx protected.zip
# 步骤 2:解压
unzip protected.zip -d extracted/
# 步骤 3:删除工作表保护标签
# 打开 extracted/xl/worksheets/sheet1.xml
# 找到 <sheetProtection ... /> 标签并删除
# 步骤 4:重新打包为 .xlsx
cd extracted/
zip -r ../unprotected.xlsx .
# 步骤 5:将 .xlsx 改回来
mv unprotected.xlsx ../unprotected.xlsx
原理很简单:.xlsx 文件本质上是一个 ZIP 压缩包,里面是 XML 文件。工作表保护只是在 XML 中加了一个 <sheetProtection> 标签,并没有真正加密文件内容。
文档加密的恢复方案#
如果你的文件是真正的「打开密码」加密,那需要正经的密码恢复。
方案一:msoffcrypto-tool(Python,免费)#
import msoffcrypto
import io
# 尝试用密码列表恢复
passwords = ['password123', 'admin2024', 'MyDoc@2024', ...]
with open('encrypted.xlsx', 'rb') as f:
file = msoffcrypto.OfficeFile(f)
for pwd in passwords:
try:
file.load_key(password=pwd)
decrypted = io.BytesIO()
file.decrypt(decrypted)
print(f"密码找到: {pwd}")
with open('decrypted.xlsx', 'wb') as out:
out.write(decrypted.getvalue())
break
except Exception:
continue
else:
print("字典中未找到正确密码")
优点:免费、Python 生态、容易集成到自动化流程中。
缺点:纯 CPU 运算,速度慢;不支持 GPU 加速;没有内置字典。
方案二:Hashcat(免费,GPU 加速)#
# 1. 使用 office2john 提取哈希
python office2john.py encrypted.xlsx > hash.txt
# 2. 根据 Office 版本选择 Hashcat 模块
# Office 2007: -m 9400
# Office 2010: -m 9500
# Office 2013+: -m 9600
# 3. 字典攻击
hashcat -m 9600 hash.txt wordlist.txt
# 4. 规则变异攻击
hashcat -m 9600 hash.txt wordlist.txt -r rules/best64.rule
Hashcat 性能参考(RTX 4090):
Office 2007 (RC4): 约 200,000 次/秒
Office 2010 (AES128): 约 50,000 次/秒
Office 2013+ (AES256): 约 8,000 次/秒
以 Office 2013+ 为例:
6 位纯数字密码:10^6 / 8000 ≈ 2 分钟
8 位字母+数字:62^8 / 8000 ≈ 27 年
注意:Office 2013+ 的高迭代次数使得每次密码尝试都很慢。这意味着 GPU 加速的优势被大幅削弱——即使 RTX 4090 也只能做到每秒 8000 次尝试。
方案三:云端恢复服务#
对于不想折腾命令行的用户,或者本地 GPU 算力不够用的场景,可以考虑云端服务。
猫密网 支持 Office 文档(Word、Excel、PowerPoint)的密码恢复。上传加密文件后,系统会使用云端分布式算力和优化过的密码字典进行恢复。
Office 文档恢复的特殊考虑:
1. 文件安全性
Office 文档通常包含敏感信息(财务数据、合同、个人信息)
猫密网支持本地特征提取(Catpasswd-Convert 工具)
只上传文件特征,不上传源文件本身
从架构角度看,这种设计在保证恢复效果的同时最大程度保护了隐私
2. 恢复时间
免费版约 7 天排队
专业版约 24 小时
如果文件比较紧急,可以考虑付费升级
3. 文件格式支持
.doc / .docx / .xls / .xlsx / .ppt / .pptx 都支持
包括 Office 97 到 Microsoft 365 的所有版本
方案四:Passware Kit(商业软件)#
Passware Kit Forensic:
- 支持 GPU 加速
- 支持分布式计算(多台电脑同时破解)
- 内置智能密码猜测策略
- 价格:$995 - $3,495
- 适合:企业 IT 部门、数据恢复公司、执法机构
恢复策略的优先级建议#
Step 1:确认加密类型
- 是打开密码还是编辑保护?
- 如果是编辑保护 → 直接改 XML(5 分钟搞定)
- 如果是打开密码 → 继续
Step 2:确认 Office 版本
- Office 97-2003 → 恢复很容易,Hashcat 几小时搞定
- Office 2007-2010 → 中等难度,取决于密码复杂度
- Office 2013+ → 较难,需要好字典和足够时间
Step 3:按成本从低到高尝试
- 先回忆密码(0 成本)
- 再用 msoffcrypto-tool 跑字典(0 成本,适合技术人员)
- 再用 Hashcat + GPU(0 成本,需要 GPU)
- 最后考虑云端服务或商业软件
实战案例:恢复一个加密的 Excel 税务文件#
这是我最近帮朋友恢复的真实案例(已脱敏):
场景:
文件:2023_tax_summary.xlsx
加密版本:Office 2019(AES-256)
密码线索:朋友记得密码里包含 "Tax" 和数字,大概 8-10 位
恢复过程:
1. 使用 msoffcrypto-tool 确认加密版本
→ AES-256, PBKDF2 迭代 100,000 次
2. 构建定制字典
基于线索 "Tax" + 数字:
- Tax2023, Tax2023!, tax2023, TAX2023
- Tax@2023, Tax#2023, Tax$2023
- MyTax2023, Tax2023ok, Tax2023!!
- ... 共生成约 5000 个候选密码
3. 使用 Hashcat 跑定制字典
hashcat -m 9600 hash.txt custom_wordlist.txt
→ 3 分钟后找到密码:Tax@2023Q4
4. 解密文件
msoffcrypto-tool -p 'Tax@2023Q4' encrypted.xlsx decrypted.xlsx
总耗时:约 20 分钟
关键洞察:定制字典比通用字典有效得多。如果你能回忆起关于密码的任何线索——哪怕只是「大概包含什么字符」——都能将恢复时间从「几年」缩短到「几分钟」。
Office 文档加密的最佳实践#
如果你正在用密码保护 Office 文档,以下建议可以帮助你避免将来忘记密码:
1. 密码存入密码管理器
创建文档加密密码后,立即存入 Bitwarden / 1Password
在备注中记录文件名和存放位置
2. 使用 Microsoft 365 的云端方案
如果文件存储在 OneDrive/SharePoint 中
可以使用 Microsoft Purview 的敏感信息管理
比密码加密更安全,也更不容易丢失访问权限
3. 考虑替代方案
- 敏感文档:使用 Veracrypt 创建加密容器(更标准、更可控)
- 协作场景:使用 Microsoft 365 的权限管理(IRM)
- 传输场景:使用 Signal/ProtonMail 的端到端加密
结语#
Office 文档的密码恢复难度随着版本迭代急剧上升。Office 2003 的加密形同虚设,而 Office 2013+ 的 AES-256 + 高迭代 PBKDF2 已经具备了相当的抗暴力破解能力。
好消息是,大多数用户设置的密码强度远低于加密算法的安全强度。一个精心构建的定制字典,配合 Hashcat 或云端算力,仍然能恢复大部分「人类可记忆」的密码。
最后,最好的恢复方案是在加密的那一刻就把密码存好。这听起来是废话,但确实是最高效的「恢复策略」。