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