当前位置:首页 > Python > 正文

Python PDF加密教程 - 使用PyPDF2保护PDF文档安全 | Python技术指南

使用Python为PDF文档添加密码保护

本教程将教你如何使用Python的PyPDF2库轻松加密PDF文件,保护敏感文档安全

教程内容概览

准备工作

安装必要的库和环境配置

加密PDF

使用PyPDF2加密PDF文档

高级功能

设置不同权限和加密强度

为什么需要加密PDF文档?

PDF是最常用的文档格式之一,常用于存储和传输敏感信息,如合同、财务报告和个人数据。加密PDF文档可以:

  • 防止未授权访问
  • 保护敏感信息不被泄露
  • 符合数据保护法规要求
  • 控制文档的打印、复制和编辑权限

准备工作

在开始之前,请确保你已安装Python环境(推荐Python 3.7+)。我们将使用PyPDF2库来处理PDF文件。

安装PyPDF2
pip install PyPDF2

基础加密方法

以下代码展示了如何使用PyPDF2加密PDF文档:

pdf_encryptor.py
import PyPDF2

def encrypt_pdf(input_path, output_path, password):
    # 读取原始PDF
    with open(input_path, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        writer = PyPDF2.PdfWriter()
        
        # 复制所有页面
        for page_num in range(len(reader.pages)):
            writer.add_page(reader.pages[page_num])
            
        # 设置密码和加密选项
        writer.encrypt(user_password=password, 
                      use_128bit=True, 
                      permissions_flag=0b1111)
        
        # 保存加密后的PDF
        with open(output_path, 'wb') as output_file:
            writer.write(output_file)

# 使用示例
encrypt_pdf("document.pdf", "encrypted_document.pdf", "MySecurePassword")

加密选项详解

PyPDF2提供多种加密选项来控制文档权限:

权限标志 二进制值 权限说明
打印文档 0b00000001 (1) 允许打印文档
修改内容 0b00000010 (2) 允许修改文档内容
复制内容 0b00000100 (4) 允许复制文本和图像
添加注释 0b00001000 (8) 允许添加注释和表单字段
所有权限 0b00001111 (15) 允许所有操作

完整加密工具示例

这是一个更完整的PDF加密工具,包含错误处理和权限控制:

advanced_pdf_encryptor.py
import PyPDF2
import os
import argparse

def encrypt_pdf(input_path, output_path, password, permissions=15):
    """
    加密PDF文档
    
    参数:
        input_path (str): 输入PDF文件路径
        output_path (str): 输出PDF文件路径
        password (str): 加密密码
        permissions (int): 权限标志位
    """
    try:
        # 验证输入文件
        if not os.path.exists(input_path):
            raise FileNotFoundError(f"输入文件不存在: {input_path}")
            
        # 读取原始PDF
        with open(input_path, 'rb') as file:
            reader = PyPDF2.PdfReader(file)
            if len(reader.pages) == 0:
                raise ValueError("输入PDF文件为空")
                
            writer = PyPDF2.PdfWriter()
            
            # 复制所有页面
            for page_num in range(len(reader.pages)):
                writer.add_page(reader.pages[page_num])
                
            # 设置加密
            writer.encrypt(
                user_password=password,
                owner_password=password,  # 用户和所有者密码相同
                use_128bit=True,
                permissions_flag=permissions
            )
            
            # 保存加密后的PDF
            with open(output_path, 'wb') as output_file:
                writer.write(output_file)
                
        print(f"PDF加密成功! 已保存到: {output_path}")
        return True
        
    except Exception as e:
        print(f"加密过程中出错: {str(e)}")
        return False

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='PDF文档加密工具')
    parser.add_argument('input', help='输入PDF文件路径')
    parser.add_argument('output', help='输出PDF文件路径')
    parser.add_argument('password', help='加密密码')
    parser.add_argument('--permissions', type=int, default=15, 
                        help='权限标志 (默认15=所有权限)')
    
    args = parser.parse_args()
    
    encrypt_pdf(
        input_path=args.input,
        output_path=args.output,
        password=args.password,
        permissions=args.permissions
    )

使用说明

命令行执行:python advanced_pdf_encryptor.py input.pdf output.pdf password [--permissions 权限值]

示例:python advanced_pdf_encryptor.py report.pdf secured_report.pdf MyP@ssw0rd! --permissions 5

(权限值5 = 1+4 = 允许打印和复制)

注意事项

  • 使用强密码(至少12个字符,包含大小写字母、数字和符号)
  • 128位加密提供基本安全性,但如需更高安全性应考虑其他方法
  • 不要忘记密码 - 加密后的PDF无法恢复
  • 加密过程会创建新的PDF文件,原始文件保持不变
  • 对于大型PDF,加密可能需要一些时间

总结

通过本教程,你已经学会了使用Python和PyPDF2库加密PDF文档。这种方法适用于:

  • 自动化文档安全处理流程
  • 批量加密多个PDF文件
  • 根据需求设置不同权限级别
  • 集成到现有Python数据处理工作流中

立即开始保护你的PDF文档,确保敏感信息安全!

需要帮助或有疑问?

欢迎在评论区留言,我会尽快回复!

发表评论