商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Python实现PDF文件加密与解密方法的完整代码

Python实现PDF文件加密与解密方法的完整代码

  发布于2026-07-07 阅读(0)

扫一扫,手机访问

PDF文件的安全保护,在企业文档管理里可不是个小问题。合同、财务报表、内部技术资料……哪一样都容不得半点马虎,未经授权的访问和篡改必须严防死守。可要是一份一份地手动设密码,不仅效率低,还很难融入自动化的工作流里。

借助Python,事情就简单多了。我们可以通过编程方式来批量处理PDF的加密和解密,把密码设置、算法选择和权限分配这些策略标准化,再嵌入到现有的文档处理管线中。下面就来拆解一下,用Python如何搞定PDF的加密、权限控制和解密。

环境准备

这次要用到的库是 Spire.PDF for Python,安装起来很简单,一行命令搞定:

pip install Spire.PDF

接着在脚本里导入所需的模块:

from spire.pdf import *

PDF加密的核心概念

在动手写代码之前,有必要先理解PDF加密体系里的几个关键概念:

  • 用户密码(User Password):打开文档时需要的密码。一旦设置了,没密码的人连内容都看不了。
  • 所有者密码(Owner Password):管控文档权限的密码。有了它,就能修改安全设置和权限配置。
  • 加密算法:PDF支持多种加密标准,像RC4(40位和128位)、AES-128、AES-256。算法越强,安全性自然越高。
  • 文档权限:控制用户能不能执行某些操作,比如打印、复制文本、填写表单等。

在Spire.PDF中,这些设置都通过PdfPasswordSecurityPolicy类来统一管理。

使用RC4算法加密PDF

最基础的加密方式,就是为PDF设置用户密码和所有者密码。下面这个示例,用的是RC4-128位加密算法,并且开放了打印和填写表单的权限:

from spire.pdf import *

# 加载 PDF 文档
doc = PdfDocument()
doc.LoadFromFile("input.pdf")

# 创建安全策略,参数分别为用户密码和所有者密码
securityPolicy = PdfPasswordSecurityPolicy("open", "test")

# 设置加密算法为 RC4-128 位
securityPolicy.EncryptionAlgorithm = PdfEncryptionAlgorithm.RC4_128

# 定义文档权限:先禁止所有操作,再逐项开放
dp = PdfDocumentPrivilege.ForbidAll()
dp.AllowPrint = True
dp.AllowFillFormFields = True
securityPolicy.DocumentPrivilege = dp

# 应用加密策略
doc.Encrypt(securityPolicy)

# 保存文档
doc.Sa veToFile("Encrypted_RC4.pdf")

这段代码里,权限控制部分是关键。`ForbidAll()` 先把所有权限都封死,然后再通过 `AllowPrint` 和 `AllowFillFormFields` 逐个开放。这种“默认禁止、逐项放行”的策略,比默认全部允许再逐个禁止要安全得多,不会因为忘了某个权限而留下漏洞。

使用AES加密提高安全等级

AES(高级加密标准)是目前业界的主流选择,安全性比RC4高出不少。Spire.PDF支持AES-128和AES-256两种密钥长度:

from spire.pdf import *

# 加载 PDF 文档
pdfDocument = PdfDocument()
pdfDocument.LoadFromFile("input.pdf")

# 创建安全策略
securityPolicy = PdfPasswordSecurityPolicy("123456789", "M123456789")

# 使用 AES-128 加密算法
securityPolicy.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES_128

# 禁止所有权限,仅允许打印
securityPolicy.DocumentPrivilege = PdfDocumentPrivilege.ForbidAll()
securityPolicy.DocumentPrivilege.AllowPrint = True

# 加密并保存
pdfDocument.Encrypt(securityPolicy)
pdfDocument.Sa veToFile("Encrypted_AES128.pdf")
pdfDocument.Close()

有一点需要留意:AES加密要求用户密码至少8个字符。密码太短,操作会失败。在生产环境里,强烈建议用包含大小写字母、数字和特殊字符的强密码。

使用AES-256进行高级别加密

如果文档里包含了高度敏感的商业数据或个人隐私,AES-256就是最稳妥的选择:

from spire.pdf import *

doc = PdfDocument()
doc.LoadFromFile("input.pdf")

# 不设置用户密码(留空),仅设置所有者密码
securityPolicy = PdfPasswordSecurityPolicy("", "test")

# 使用 AES-256 加密
securityPolicy.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES_256

# 设置权限:允许降级打印和填写表单
dp = PdfDocumentPrivilege.ForbidAll()
dp.AllowDegradedPrinting = True
dp.AllowFillFormFields = True
securityPolicy.DocumentPrivilege = dp

doc.Encrypt(securityPolicy)
doc.Sa veToFile("Encrypted_AES256.pdf")

这段代码有个有意思的地方:用户密码被设成了空字符串。这意味着谁都能打开文档看内容,但打印、复制这些操作权限还是受所有者密码保护。这种配置在某些场景下很实用——比如文档需要广泛分发,但又不希望别人随意编辑或复制。

另外要注意 `AllowDegradedPrinting` 和 `AllowPrint` 的区别:降级打印会以较低分辨率输出,能有效防止高质量文档复制,对保护知识产权挺有帮助。

解密PDF文档

解密操作需要用到所有者密码(或者用户密码)。在加载文档时传对密码,然后调用 `Decrypt()` 方法就行了:

from spire.pdf import *

# 使用所有者密码加载加密的 PDF
doc = PdfDocument()
doc.LoadFromFile("Encrypted_RC4.pdf", "test")

# 解密文档
doc.Decrypt()

# 保存为未加密的 PDF
doc.Sa veToFile("Decrypted.pdf")

如果当初是用用户密码打开的文档,那解密时还得额外提供所有者密码:

# 使用用户密码加载
doc.LoadFromFile("Encrypted_RC4.pdf", "open")

# 传入所有者密码进行解密
doc.Decrypt("test")

doc.Sa veToFile("Decrypted.pdf")

解密后的PDF,就不再受任何密码和权限保护了,可以随意打开和编辑。

可用权限一览

`PdfDocumentPrivilege` 提供了多种权限控制选项,常用的权限属性整理如下:

权限属性说明
AllowPrint允许高质量打印
AllowDegradedPrinting允许降级(低分辨率)打印
AllowCopy允许复制文档内容
AllowFillFormFields允许填写表单字段
AllowModifyContents允许修改文档内容
AllowComment允许添加注释

合理搭配这些权限,就能为不同类型的文档定制不一样的安全策略。比如,分发给客户的报告可以允许打印但禁止复制;内部用的表单允许填写但禁止修改其他内容。

实用技巧

加密算法的选择建议:RC4-128的兼容性最好,适合需要支持老旧PDF阅读器的场景;AES-128能满足大多数日常需求;AES-256则是给高度敏感文档准备的。在安全要求不太严苛的情况下,AES-128其实已经够用了。

批量加密处理:如果要对整个文件夹里的PDF统一加密,可以配合Python的 `os` 或 `pathlib` 模块来遍历文件,对每个文件应用同样的安全策略。主人密码和用户密码建议通过配置文件或环境变量来管理,别硬编码在脚本里。

密码管理规范:在实际项目中,密码千万别直接写在代码里。用环境变量、配置文件或者专门的密钥管理服务来存储,能有效降低密码泄露的风险。

总结

总的来说,这篇内容把用Python对PDF进行加密和解密的完整流程拆解了一遍,从RC4、AES-128到AES-256三种算法都有涉及,用户密码、所有者密码以及文档权限的配置也讲清楚了。这些功能在文档安全管理、自动化报告生成和内容保护等场景里,实用性非常强。

如果再结合Spire.PDF的其他能力——比如添加水印、替换文本、处理表单——就能搭建出一套更完善的文档安全自动化方案。

本文转载于:https://www.jb51.net/python/3668795a1.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注