PDF 解密分两条路,强度差几十个数量级。先判断面对的是哪一种,再决定要不要花时间。
先判断:权限锁还是真加密
打开 PDF 时没有要密码框就能看到内容——这是**权限密码(owner password)**保护的文件。文档本身未加密,只是阅读器在跟”禁止复制 / 打印”的 flag 说话。任何忽略 flag 的工具都能解,3 秒搞定。
打开时弹密码框——这是用户密码(user password),文档内容用 AES 算法真实加密。没密码就没内容。
这两个路径完全不同:
| 维度 | 权限锁 | 真加密 |
|---|---|---|
| 中文别名 | 限制密码 / 所有者密码 | 打开密码 / 用户密码 |
| 表现 | 能看不能复制/打印 | 看不到内容 |
| 算法本质 | 文档不加密,只设 flag | AES 加密文档对象 |
| 解开难度 | 任意工具 3 秒 | 取决于密码强度 |
| 合规性 | 一般无争议 | 自己文件可以,别人的需授权 |
路径一:移除权限限制
工具几乎都能解,原理是重写 PDF 时不带 /P 权限位:
# qpdf 一键解锁
qpdf --decrypt input.pdf output.pdf
--decrypt 即使没有密码也能成功——因为文档内容根本没加密。GUI 工具(包括本工具)按一下”移除限制”就行。
操作合规边界:自己的文件、合法获得的文件做这一步没问题。但有些 PDF 配套版权协议明确禁止”绕过技术保护措施”,商业用途请先看协议。
路径二:恢复用户密码
只能暴力破解或字典攻击——AES 没有数学捷径。
算法版本判断
qpdf --show-encryption file.pdf
输出类似:
R = 6
P = -3392
User password = ""
extract for accessibility: not allowed
modify document: not allowed
print document: not allowed
modify annotations: not allowed
R 是修订号:
| R | 算法 | 强度 |
|---|---|---|
| 2 | RC4 40 位 | 极弱,现代 GPU 秒破 |
| 3 | RC4 128 位 | 弱(被密码学界标弃,但 PDF 用法仍可暴力) |
| 4 | RC4 / AES-128 | 中(KDF 迭代少,hashcat 速率 GH/s 量级) |
| 5 | AES-256(PDF 1.7 ExtLevel 3) | 较弱——KDF 迭代极少,速率接近 R=4 |
| 6 | AES-256(PDF 2.0) | 强(标准 KDF 迭代 50+ 轮,速率降到 100k H/s 量级) |
R = 2 / 3 的 PDF 古董文件,纯数字密码可能秒破;R = 5 由于 KDF 实现缺陷,强度比号称的 AES-256 弱很多个量级;只有 R = 6 才是真正抗 GPU 的强加密。
工具
| 工具 | 用途 | 速度 |
|---|---|---|
pdfcrack | 字典 + 暴力破解,CPU | 数千次 / 秒 |
John the Ripper | 通用密码破解,支持 GPU | 数万-百万次 / 秒(GPU) |
Hashcat | GPU 加速最快 | 数十万次 / 秒(强 GPU) |
提取 PDF 密码 hash:
# John 套件提供 pdf2john.pl
pdf2john.pl encrypted.pdf > hash.txt
john --wordlist=rockyou.txt hash.txt
估算时间
时长强烈依赖加密版本——同样的密码长度,R=4 比 R=6 快约 10⁵ 倍。
R = 4 / R = 5(hashcat 速率 ≈10 GH/s,RTX 4090):
| 密码空间 | 数量 | 时间 |
|---|---|---|
| 8 位纯数字 | 10⁸ | < 1 秒 |
| 8 位小写字母 | 2×10¹¹ | 约 20 秒 |
| 8 位字母数字 | 2×10¹⁴ | 约 5.5 小时 |
| 10 位字母数字 | 8×10¹⁷ | 约 2.5 年 |
| 12 位含特殊符号 | 95¹² | 数百万年 |
R = 6(hashcat 速率 ≈100 KH/s,RTX 4090):
| 密码空间 | 数量 | 时间 |
|---|---|---|
| 4 位纯数字 | 10⁴ | < 1 秒 |
| 6 位纯数字 | 10⁶ | ≈10 秒 |
| 8 位纯数字 | 10⁸ | ≈17 分钟 |
| 8 位小写字母 | 2×10¹¹ | 约 23 天 |
| 8 位字母数字 | 2×10¹⁴ | 约 60 年 |
| 12 位含特殊符号 | 95¹² | 宇宙寿命 |
8 位字母 + 数字 是当前实战分界线:R=4 半天可破,R=6 几十年不可破。先 qpdf --show-encryption 看 R 再决定要不要动手。
如果是自己设的密码,往往有规律——生日、纪念日、姓名拼音。字典攻击 + 规则变换比纯爆破高效得多:
# 生成基于"zhangsan"的变形字典
hashcat --rules=best64.rule wordlist.txt hash.txt
best64 规则把 zhangsan 变成 Zhangsan、zhangsan123、zhangsan!、@zhangsan… 几十种变形。
在线工具的真相
“在线 PDF 密码破解 30 秒搞定”几乎全是骗:
- 真破解:物理上需要 GPU 数小时-数年,30 秒不可能
- 常见操作:拿你的文件后台跑字典攻击,破不开就退还说”破解失败”
- 极端情况:直接保留文件作他用——敏感合同、身份证扫描件不要走在线服务
唯一可信的”在线 30 秒解开”是处理权限密码——确实快,因为不是真破解。
合规边界
| 场景 | 是否合规 |
|---|---|
| 自己设的密码忘了 | 合规 |
| 合法买的图书、报告 | 一般合规(看版权协议) |
| 客户给的加密合同 | 应找客户拿密码,不要私自破解 |
| 第三方泄漏 / 网上下载的加密 PDF | 法律风险高 |
公司内部文档涉及合规审计 / 取证,必须走正规流程,不能私自跑工具。
实操建议
自己的文件忘密码:
- 先试常用密码——生日、电话尾号、宠物名、现/旧邮箱密码
- 不行就用 hashcat + 自定义字典 + 规则变换
- 8 位以下基本能破,10 位以上看运气
- 重要文档密码要存到密码管理器——这次教训记牢
他人的文件需要解锁:
- 优先找原作者要密码——比破解快、合规
- 走法律路径(取证、版权所有方授权)
- 别上传给在线服务
一句话总结
权限锁是几秒钟的小事,真加密是几年的大工程;动手前先用 qpdf --show-encryption 看清面对的是哪一种。