前两天帮一位做财务的朋友恢复了一个加密的 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 的两种保护机制: