python实现PDF加密文件解密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 在网上下载的一下书籍pdf文件加密时,每次打开都需要输入密码,所以写了个小工具

依赖安装:pip install PyPDF2

具体代码:

import os

from PyPDF2 import PdfWriter, PdfReader

 

def get_reader(filename, password):

   try:

       old_file = open(filename, 'rb')

   except Exception as err:

       print('文件打开失败!' + str(err))

       return None

 

   # 创建读实例

   pdf_reader = PdfReader(old_file, strict=False)

 

   # 解密操作

   if pdf_reader.is_encrypted:

       if password is None:

           print('%s文件被加密,需要密码!' % filename)

           return None

       else:

           if pdf_reader.decrypt(password) != 1:

               print('%s密码不正确!' % filename)

               return None

 

   if old_file in locals():

       old_file.close()

 

   return pdf_reader

 

def decrypt_pdf(filename, password, decrypted_folder):

   """

   将加密的文件进行解密,并生成一个无需密码的pdf文件

   :param filename: 原先加密的pdf文件

   :param password: 对应的密码

   :param decrypted_folder: 解密后放置文件的文件夹路径

   :return:

   """

   # 生成一个Reader和Writer

   pdf_reader = get_reader(filename, password)

   if pdf_reader is None:

       return

 

   pdf_writer = PdfWriter()

   for page in pdf_reader.pages:

       pdf_writer.add_page(page)

 

   # 获取解密后的文件名

   file_name, _ = os.path.splitext(filename)

 

   if decrypted_folder is not None:

       decrypted_filepath = os.path.join(decrypted_folder, os.path.basename(file_name) + ".pdf")

   else:

       print('生成文件失败,请给出解密后放置文件夹')

       return

 

   # 写入新文件

   with open(decrypted_filepath, 'wb') as decrypted_file:

       pdf_writer.write(decrypted_file)

       print('解密成功' + decrypted_filepath)

 

# 获取文件夹中的pdf文件路径

def get_pdf_paths(folder_path):

   pdf_paths = []

   for root, _, files in os.walk(folder_path):

       for file in files:

           if file.endswith(".pdf"):

               pdf_path = os.path.join(root, file)

               pdf_paths.append(pdf_path)

   return pdf_paths

 

 

pdf_path = input('请输入要解密的pdf或含pdf文件夹路径:')

# pdf_path = '文件夹或文件路径'

password = input('请输入密码:')

# password = '密码'

decrypted_folder = input('请输入解密文件夹:')

# decrypted_folder = '解密文件夹'

 

if os.path.isdir(pdf_path):

   pdf_paths = get_pdf_paths(pdf_path)

   for path in pdf_paths:

       decrypt_pdf(path, password, decrypted_folder)  # 修改此处,传递解密后文件存放的文件夹路径

else:

   _, extension = os.path.splitext(pdf_path)

   if extension.lower() == '.pdf':

       decrypt_pdf(pdf_path, password, decrypted_folder)

   else:

       print('文件非pdf')


解密成功截图:

image.png


目录
相关文章
|
2月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
2月前
|
数据安全/隐私保护 Python
Zipfile学习笔记(二)::通过zipfile模块暴力破解加密的压缩文件
如何使用Python的zipfile模块生成密码表并尝试暴力破解加密的ZIP压缩文件。
44 1
Zipfile学习笔记(二)::通过zipfile模块暴力破解加密的压缩文件
|
2月前
|
Java Apache Maven
将word文档转换成pdf文件方法
在Java中,将Word文档转换为PDF文件可采用多种方法:1) 使用Apache POI和iText库,适合处理基本转换需求;2) Aspose.Words for Java,提供更高级的功能和性能;3) 利用LibreOffice命令行工具,适用于需要开源解决方案的场景。每种方法都有其适用范围,可根据具体需求选择。
|
2月前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
307 1
|
2月前
|
索引 Python
PDF文件页面提取操作小指南
PDF文件页面提取操作小指南
80 4
|
2月前
|
Python
Python对PDF文件页面的旋转和切割
Python对PDF文件页面的旋转和切割
46 3
|
2月前
|
计算机视觉 Python
Python操作PDF文件
Python操作PDF文件
34 1
|
2月前
|
JavaScript 前端开发 容器
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
164 0
|
2月前
|
数据安全/隐私保护 Python
python学习十一:python常用模块使用,如 加密模块pyarmor,时间模块time等
这篇文章介绍了Python中两个常用模块的使用:加密模块pyarmor用于保护代码,以及时间模块time用于处理时间相关的功能。
82 0
|
2月前
|
数据安全/隐私保护 Python
Python中的MD5加密“解密”
Python中的MD5加密“解密”
103 0