Python 使用 PyPDF2 实现 PDF 加密与密码破解
前言
在数据安全日益重要的今天,保护敏感文档的访问权限是基础需求。PDF 格式因其跨平台性和安全性被广泛使用,但默认情况下 PDF 文件可能不包含强加密。本文将详细介绍如何使用 Python 的 PyPDF2 库对 PDF 文件进行加密,以及如何通过暴力破解的方式恢复弱密码保护的 PDF 内容。这不仅有助于理解 PDF 加密机制,也能帮助开发者评估密码强度。
环境准备
1. 安装依赖库
首先,需要安装 PyPDF2 库。该库支持读取、写入和修改 PDF 文件。
pip install PyPDF2
安装完成后,可以通过以下命令验证版本:
python -m pip show PyPDF2
注意:PyPDF2 是一个较成熟的库,但在处理某些高级加密标准(如 AES-256)时可能存在限制。对于现代 PDF 安全需求,建议关注其后续项目 pypdf。
2. 代码结构说明
我们将实现两个核心功能:
- 加密函数:将普通 PDF 转换为带密码保护的 PDF。
- 解密函数:尝试遍历可能的密码组合以打开加密文件。
PDF 加密原理简述
PDF 加密通常基于对称加密算法(如 RC4 或 AES)。当设置密码后,文件内容会被加密,只有提供正确密钥才能解密并渲染页面。如果密码过于简单(如纯数字),攻击者可以通过穷举法(Brute Force)快速破解。
实现 PDF 加密
下面是一个完整的加密函数示例。该函数读取源文件,添加指定密码,并保存为新文件。
import PyPDF2
def encrypt_pdf(old_path, new_path, password='1234'):
"""
给 PDF 文件添加密码保护
:param old_path: 待加密文件的绝对路径
:param new_path: 加密后文件的保存路径
:param password: 设置的密码字符串
"""
try:
with open(old_path, 'rb') as pdf_file:
# 创建 PdfFileReader 对象
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
# 创建 PdfFileWriter 对象
pdf_writer = PyPDF2.PdfFileWriter()
# 将所有页面添加到 Writer 中
for page_num in range(pdf_reader.numPages):
pdf_writer.addPage(pdf_reader.getPage(page_num))
# 设置密码并加密
pdf_writer.encrypt(user_password=password)
(new_path, ) result_pdf:
pdf_writer.write(result_pdf)
()
Exception e:
()
__name__ == :


