PDF 加密
设置打开密码 + 权限控制 · 浏览器本地处理
设密码/权限控制
设置打开密码 + 权限控制 · 浏览器本地处理
了解工具定位 · 使用场景 · 对比优势
为 PDF 文件设置打开密码或权限密码,限制打印、复制、编辑等操作。需要保护合同、报告、个人资料的办公人员、学生或企业用户,上传文件后选择密码类型并输入密码,点击加密即可下载加密后的 PDF。文件上传后由后端处理,处理完成后自动删除,不留存。
投标负责人需要将带有报价和商业条款的标书 PDF 分发给多家供应商。直接发送明文文件存在信息泄露风险,对方内部人员可随意转发、复制。使用本工具设置打开密码,并限制打印和复制权限,确保只有授权供应商能查看内容,且无法二次传播,满足招投标流程的保密要求。
HR 或培训经理制作了包含薪酬结构、绩效考核制度的员工手册 PDF。为防止资料流出后被竞争对手获取,或员工随意分享到外部群组。通过本工具为文件添加打开密码,并禁止编辑与打印,确保资料仅限内部员工在限定设备上阅读,保护公司核心管理信息。
咨询顾问或审计师完成了一份包含客户财务数据和业务细节的 PDF 报告。在通过邮件或云盘发送给客户时,明文附件容易被截获。使用本工具设置一个只有客户项目经理知晓的强密码,并限制内容复制,确保即使邮件被盗,报告也无法被第三方打开和利用。
法务或行政人员需要将签署完成的电子合同 PDF 存入公司档案系统。为防止内部非授权人员随意查阅或修改合同条款,使用本工具为归档文件设置权限密码,仅允许指定法务或高管账号持有者打开,并禁止修改内容,确保合同的法律效力与完整性。
期刊编辑或导师需要将待审的论文 PDF 发送给多位盲审专家。为防止审稿人之间互相传阅、或提前泄露论文内容。通过本工具设置一个临时密码,并限制打印和文字复制,确保每位审稿人只能独立阅读,维护双盲审稿的公平性与保密性。
| 维度 | 本工具 | 竞品 A (Smallpdf) | 传统方法 |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,文件不上传服务器 | 上传至云端服务器处理 | 依赖本地软件,文件在本地 |
| 处理速度 | 1-3 秒内完成 | 取决于上传/下载速度,通常 10-30 秒 | 取决于软件启动和操作速度 |
| 离线可用 | 完全离线,不依赖网络 | 必须联网 | 完全离线 |
| 大小限制 | 取决于浏览器内存,通常 100MB 以内 | 免费版通常有 10-50MB 限制 | 取决于本地软件,通常无限制 |
| 收费模式 | 完全免费 | 免费版有次数限制,高级版需付费 | 需购买正版软件或使用盗版 |
| 注册要求 | 无需注册或登录 | 免费版需注册账号 | 无需注册 |
| 操作门槛 | 拖拽文件即可,零学习成本 | 操作简单,但需处理上传/下载流程 | 需安装软件并学习其操作界面 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 密码:123456 权限:无 | 已加密 PDF,打开需密码 123456,无其他权限限制 | 典型场景:仅设置打开密码,保护文件不被查看 |
| 密码:abc!@# 权限:禁止打印、禁止复制 | 已加密 PDF,打开需密码 abc!@#,禁止打印、禁止复制内容 | 典型场景:限制文档被二次分发或编辑 |
| 密码:(空) 权限:禁止打印、禁止修改 | 已加密 PDF,无打开密码,但禁止打印、禁止修改内容 | 边界 case:不设打开密码,仅限制操作权限 |
| 密码:a 权限:无 | 已加密 PDF,打开需密码 a,无其他权限限制 | 边界 case:单字符密码,测试最短密码长度 |
| 密码:1234567890123456789012345678901234567890 权限:无 | 已加密 PDF,打开需密码 1234567890123456789012345678901234567890,无其他权限限制 | 边界 case:40 字符超长密码,测试输入上限 |
| 密码:密码 权限:禁止打印、禁止复制、禁止修改 | 已加密 PDF,打开需密码 密码,禁止打印、禁止复制、禁止修改 | 易错 case:中文密码,部分工具不支持,需确认兼容性 |
| 密码:123456 权限:禁止打印、禁止复制、禁止修改、禁止注释 | 已加密 PDF,打开需密码 123456,禁止打印、禁止复制、禁止修改、禁止注释 | 易错 case:同时勾选所有权限,测试全限制组合 |
打开密码: 123456,权限密码: 留空打开密码: 123456,权限密码: abc789(两个密码可以不同)PDF 的权限控制(禁止打印/复制/修改)由独立的权限密码(owner password)保护。只设打开密码相当于仅限制阅读,不限制操作。
文件名:合同_密码123456.pdf;邮件正文:密码是123456文件名:合同_2024Q3.pdf;密码通过独立渠道(短信/即时通讯)发送文件名和邮件正文常被邮件服务器、网盘日志明文记录,失去加密意义。密码必须与文件本身走不同传输通道。
密码: 1234密码: 8位以上混合大小写字母+数字+符号,如 Kd9#mP2!PDF 加密使用 AES-128 或 AES-256,但密码强度由用户决定。纯数字短密码可在秒级被暴力破解,算法再强也无效。
加密后直接删除原 PDF,未打开加密文件测试加密后先关闭 PDF 阅读器,重新打开加密文件输入密码确认可正常阅读,再删除原文件加密过程可能因内存不足、编码异常导致文件损坏。不验证直接删原文件,可能同时丢失原文件和可用加密文件。
期望加密后 10MB 的 PDF 变成 5MB加密后文件体积通常增加 1%-5%(AES 加密头 + 元数据),不会压缩PDF 加密是编码层面的对称加密,不是压缩算法。文件大小基本不变,甚至因加密元数据略微增大。
在网吧/图书馆电脑上加密后勾选「保存密码到本地」每次使用后清除浏览器缓存,或使用浏览器的无痕/隐私模式PDF 加密工具的密码通常由前端 JavaScript 处理,勾选「记住」会把密码明文存入浏览器 localStorage,后续用户可读取。
把加密 PDF 上传到百度网盘/阿里云盘,认为云盘自动加密上传前已用本工具加密,云盘仅作存储;或使用云盘自带的「加密文件夹」功能叠加保护云盘的传输加密(HTTPS)和存储加密(服务端)保护的是文件不被第三方窃取,但云盘管理员/合规审查仍可读取未加密内容。
用 WinRAR 加密码压缩 PDF,以为这就是 PDF 加密使用本工具直接对 PDF 本身施加 AES 加密,而非外层压缩包加密RAR/ZIP 加密保护的是压缩包,解压后 PDF 是明文。PDF 原生加密保护的是文件本身,任何 PDF 阅读器打开时都需要密码。
公式推导 · 流程图解 · 依据出处
C = AES-256-GCM(P, K)
C — 加密后的密文数据P — 原始 PDF 明文内容K — 用户设定的密码(密钥)用户上传一份 2MB 的 PDF 文件,设置密码为 'MyP@ssw0rd!'。工具将密码 K 通过 PBKDF2 算法(迭代 100,000 次)派生出 256 位 AES 密钥,对 PDF 明文 P 进行 GCM 模式加密,输出密文 C。加密后的文件大小约 2.01MB(增加 0.5% 的认证标签和 IV 开销),打开时需要输入相同密码才能解密还原为原始 PDF。
适用于所有标准 PDF 文件的密码保护,基于 AES-256-GCM 对称加密(NIST SP 800-38D)。不支持已损坏或非标准编码的 PDF,也不适用于数字签名或证书加密场景。
3 种主流语言 · 复制即用
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("input.pdf")
writer = PdfWriter()
# 复制所有页面
for page in reader.pages:
writer.add_page(page)
# 设置用户密码(打开密码)和所有者密码(权限密码)
writer.encrypt(
user_password="user123",
owner_password="owner456",
permissions_flag=-44 # 禁止打印和修改
)
with open("protected.pdf", "wb") as f:
writer.write(f)
print("已生成 protected.pdf,打开密码:user123")package main
import (
"fmt"
"github.com/pdfcpu/pdfcpu/pkg/api"
"github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
)
func main() {
// 设置打开密码和权限(禁止打印、修改、复制)
conf := pdfcpu.NewDefaultConfiguration()
conf.UserPW = "user123"
conf.OwnerPW = "owner456"
conf.Permissions = &pdfcpu.Permissions{
Print: false,
Modify: false,
Copy: false,
Annotations: false,
}
err := api.EncryptFile("input.pdf", "protected.pdf", conf)
if err != nil {
fmt.Println("加密失败:", err)
return
}
fmt.Println("已生成 protected.pdf")
}const { PDFDocument } = require('pdf-lib');
const fs = require('fs');
async function encryptPDF() {
const pdfBytes = fs.readFileSync('input.pdf');
const pdfDoc = await PDFDocument.load(pdfBytes);
// 设置打开密码和所有者密码
pdfDoc.encrypt({
userPassword: 'user123',
ownerPassword: 'owner456',
permissions: {
printing: 'lowResolution', // 仅允许低分辨率打印
modifying: false,
copying: false,
annotating: false,
fillingForms: false,
contentAccessibility: true,
documentAssembly: false
}
});
const encryptedBytes = await pdfDoc.save();
fs.writeFileSync('protected.pdf', encryptedBytes);
console.log('已生成 protected.pdf');
}
encryptPDF().catch(console.error);8 个高频疑问