给 PDF 加密码感觉很严肃,但很多人不知道的是:PDF 有两种密码,而其中一种从技术上就形同虚设。下次收到”禁止打印”的 PDF 被秒解时,你就知道原因了。
两种密码的定位
PDF 规范(ISO 32000)定义了两个密码:
| 密码 | 英文名 | 作用 | 真加密吗 |
|---|---|---|---|
| 打开口令 | User Password / Document Open Password | 打开文档前必须输入 | 是 |
| 权限口令 | Owner Password / Permissions Password | 修改权限前必须输入 | 不是 |
关键区别:打开口令决定能否看到内容;权限口令只是告诉阅读器”请禁止复制/打印/编辑”——但这个”请”是可选的。
权限口令为什么不是真加密
设计初衷
1993 年 PDF 1.1 加入密码时,Adobe 的设想是:商业打印厂商会提供”加密 PDF 阅读器”,尊重权限位;用户想解除限制得找 Adobe 付费的专业版。这在 90 年代互联网不发达时还能用。
技术事实
文档内容本身加密 / 不加密由打开口令决定:
- 有 user password:内容加密,无密码看不到
- 只有 owner password:内容明文存储,文件头有一个”权限 flag”说明不允许什么
- 两个都没有:纯明文
只有 owner password 的 PDF,任何不读权限 flag 的 PDF 解析器都能完整提取内容——内容本来就没加密。
秒破工具原理
网上一堆”PDF 解密”工具,在”只有 owner password”的场景下:
- 用任意开源 PDF 库(PDFium、PyPDF、Ghostscript)读文档
- 忽略 permissions flag
- 生成新 PDF 输出
整个过程不需要任何爆破算法,因为根本就没加密。正因如此,处理时间几乎是瞬间。
打开口令:真加密
PDF 打开口令对文档内容做实际加密:
- PDF 1.3-1.4:40 位 RC4(已被破解)
- PDF 1.4-1.5:128 位 RC4(弱,应避免)
- PDF 1.6:128 位 AES(安全)
- PDF 1.7+:256 位 AES(推荐)
现代工具默认给 PDF 1.7+ 用 AES-256。强密码下这个加密在可预见的未来无法破。
设密码时该设哪个
按目的选:
敏感内容不能外传
设打开口令(user password),必须用 AES-256,密码至少 12 位随机。别只设权限口令——那等于没设。
防止同事误打印 / 误编辑
可以设权限口令,当作”防呆提示”。但要预期到”真想绕过就能绕过”——不适合法律证据、财报等正式用途。
两个都设
PDF 支持同时设两个。user password 负责”能不能看”,owner password 负责”能不能改”。管理场景合适(员工看到内容但不能随便改和外传)。
常见 PDF 加密误区
”我设了密码就安全”
关键问题:哪种密码?如果只是 owner password,一键解除;如果 user password 密码弱(生日、123456),字典攻击分分钟。
“加密 PDF 转图片就绕过了”
对只有 owner password 的 PDF 确实成立——你能看到内容才能转图片,转图片后自然没有权限限制。这恰恰证明 owner password 不是真加密。
对有 user password 的 PDF,你打不开就转不了图片,除非你知道密码。
“打印成 PDF 能去密码”
系统”打印到 PDF”的前提是当前 PDF 阅读器允许打印。
- 只有 owner password 且阅读器遵守 flag:不能打印,但能绕过(用不遵守的阅读器)
- 只有 owner password 且阅读器不遵守:直接打印,生成无密码 PDF
- 有 user password:输入密码才能打开,打开后如果 owner password 允许打印就能打
”PDF 里带水印就防得住截图”
水印只是威慑,技术上挡不住。用户打开能看到 = 用户能截图。高敏场景应该走流式阅读器 + 动态水印(含用户 ID)+ 拒绝复制粘贴快捷键,但这些都是软防护,决心够大的人都能绕过。
加密 PDF 的兼容性
不同阅读器对加密方式支持不同:
| 阅读器 | AES-128 | AES-256 |
|---|---|---|
| Adobe Reader | ✓ | ✓(11+) |
| macOS Preview | ✓ | ✓ |
| Chrome / Edge PDF | ✓ | ✓ |
| 老版 Foxit | ✓ | 部分 |
| 手机系统阅读器 | ✓ | 多数支持 |
| 打印厂商设备 | ✓ | 不一定 |
发给老系统(打印厂、政府部门),AES-128 兼容性更好;现代场景直接 AES-256。
强 PDF 密码的标准
和普通账号密码相同:
- 长度 ≥ 12 位(高敏 ≥ 16)
- 含大小写字母 + 数字 + 符号
- 不用字典词、生日、公司名
- 每份文档不同密码
密码记不住用密码管理器。不要在同一邮件里既发文件又发密码。
解除权限限制的合规性
给自己的文档解除权限限制——合法。 帮他人解除——看授权情况。 解除非授权的版权内容——违法。
工具只是工具,用途由你决定。很多场景是”自己加密忘了 owner password 只记得 user password”——那就是合理的找回需求。
加密一个 PDF
选文件,设置打开密码(建议 12 位以上)和/或权限密码,算法选 AES-256——本地浏览器加密,文件不上传。生成的 PDF 在 Adobe Reader、Edge、macOS Preview 等主流阅读器里都能打开(需要密码)。