用python完成PDF的解密!!!(!代码直接可以运行!)
用python实现pdf解密,可用来学习,但不可用于商业!!!
用python的库函数pypdf2完成解密,如果不会用python的小伙伴别担心,直接点总结看最暴力最直接的办法(在线解密)
再次提示:!!!不可用于商业!!!
前言
利用pypdf2完成pdf的解密,这里的事例是python3环境下的,当然python2下也可以运行,只需要修改名称即可,在代码中有修改的地方,笔者也会指出,看完这篇你不会解密pdf的话!!!那我就再写一篇。
一、导入库函数
这里用到的模块有pypdf2、pycryptodome,如果没有模块的需要在对应的虚拟环境中执行以下的pip安装命令
pip install pypdf2
pip install pycryptodome
如果 安装超时 报错了请移步这里观看 ——》》》清华源安装速度提升!!!
二、主要函数解读
1.引入库
如果是python2的在引入函数方法的时候需要改一下,如果是python3的就直接复制下面代码就好
from PyPDF2 import PdfReader #pdf的读取方法
from PyPDF2 import PdfWriter #pdf的写入方法
"""
如果是python2的将上面的PdfReader和PdfWriter改为
PdfFileReader和PDFfileWriter即可
"""
from Crypto.Cipher import AES #高加密的方法,要引入不然会报错
2.自定义pdf读取函数
python2需要修改的地方在代码中已经标注,python3的直接复制下面代码即可
def get_reader(filename, password): #读取pdf的方法(自定义函数)
try:
old_file = open(filename, 'rb')
print('解密开始...')
except Exception as err:
return print('文件打开失败!' + str(err))
"""如果是python2将PdfReader改为PdfFileReader"""
pdf_reader = PdfReader(old_file, strict=False) #读取pdf文件
"""如果是python2将is_encrypted改为isEncrypted"""
if pdf_reader.is_encrypted: #解密操作(以下操作是自适应,不会展示在终端中)
if password is None:
return print('文件被加密,需要密码!--{}'.format(filename))
else:
if pdf_reader.decrypt(password) != 1:
return print('密码不正确!--{}'.format(filename))
elif old_file in locals():
old_file.close() #如果pdf文件已经在本地了就关闭
return pdf_reader #返回读出pdf的值
3.自定义pdf生成函数
将加密的文件及逆行解密,并生成一个无需密码pdf文件,下面是生成函数deception_pdf的基本参数
filename: 原先加密的pdf文件名称
password: 原文件对应的密码
decrypted_filename: 解密之后的文件名
def deception_pdf(filename, password, decrypted_filename=None): #生成新pdf的方法(自定义函数)
print('正在生成解密...')
#得到传入的文件名和密码(这里不用做修改)
pdf_reader = get_reader(filename, password)
if pdf_reader is None:
return print("无内容读取")
"""如果是python2将is_encrypted改为isEncrypted"""
elif not pdf_reader.is_encrypted:
return print('文件没有被加密,无需操作')
"""如果是python2将PdfWriter改为PdfFileWriter"""
pdf_writer = PdfWriter() #写pdf(记录pdf内容)
"""如果是python2将append_pages_from_reader改为appendPagesFromReader"""
pdf_writer.append_pages_from_reader(pdf_reader)
if decrypted_filename is None: #创建解密后的pdf文件和展示文件的路径
decrypted_filename = "".join(filename.split('.')[:-1]) + '_' + '已解密' + '.pdf'
print("解密文件已生成:{}".format(decrypted_filename))
# 写入新文件
pdf_writer.write(open(decrypted_filename, 'wb'))
三、完整源代码
from PyPDF2 import PdfReader #pdf的读取方法
from PyPDF2 import PdfWriter #pdf的写入方法
from Crypto.Cipher import AES #高加密的方法,要引入不然会报错
def get_reader(filename, password): #读取pdf的方法(自定义函数)
try:
old_file = open(filename, 'rb')
print('解密开始...')
except Exception as err:
return print('文件打开失败!' + str(err))
#如果是python2将PdfReader改为PdfFileReader
pdf_reader = PdfReader(old_file, strict=False) #读取pdf文件
# 如果是python2将is_encrypted改为isEncrypted
if pdf_reader.is_encrypted: #解密操作(以下操作是自适应,不会展示在终端中)
if password is None:
return print('文件被加密,需要密码!--{}'.format(filename))
else:
if pdf_reader.decrypt(password) != 1:
return print('密码不正确!--{}'.format(filename))
elif old_file in locals():
old_file.close() #如果pdf文件已经在本地了就关闭
return pdf_reader #返回读出pdf的值
def deception_pdf(filename, password, decrypted_filename=None): #生成新pdf的方法(自定义函数)
print('正在生成解密...')
pdf_reader = get_reader(filename, password) #得到传入的文件名,和密码(如果密码没有可以不填)
if pdf_reader is None:
return print("无内容读取")
# 如果是python2将is_encrypted改为isEncrypted
elif not pdf_reader.is_encrypted:
return print('文件没有被加密,无需操作')
# 如果是python2将PdfWriter改为PdfFileWriter
pdf_writer = PdfWriter() #写pdf(记录pdf内容)
#如果是python2将append_pages_from_reader改为appendPagesFromReader
pdf_writer.append_pages_from_reader(pdf_reader)
if decrypted_filename is None: #创建解密后的pdf文件和展示文件的路径
decrypted_filename = "".join(filename.split('.')[:-1]) + '_' + '已解密' + '.pdf'
print("解密文件已生成:{}".format(decrypted_filename))
# 写入新文件
pdf_writer.write(open(decrypted_filename, 'wb'))
if __name__ == '__main__':
# 逗号前面的为需要解密的pdf文件路径,后面的''里面为密码,如果不知道就用不填
deception_pdf(r'E:\考研\301数学一\数学书\数学书\2024kaoyanmath1.pdf', '')
使用方法:
我们要先得到需要解密的文件路径,如下看到我们的文件路径为(E:\考研\301数学一\数学书\数学书\2024kaoyanmath1.pdf)复制后,再黏贴到代码中的指定位置即可
为了看到直观效果,我们看到这里的原文件是被加密的,接下来我们运行上面的代码然后再来看看效果
我们接着运行代码,接着指向的地址看
我们看到解密后的文件因为取消了加密权限,文件的大小也小了点
总结
好了以上就是解密pdf的方法了
以上就是今天要讲的内容,本文是直接用实战来完成pdf文件的解密,如果各位看官需要研究pypdf2的各个函数的详细用法,请移步——》》》PyPDF中文文档,如果实在不会python觉得太麻烦,又想快速解决这个问题,那就移步这里——》》》在线pdf解密(但可能会有文件泄密的风险)
如果觉得作者写的不错的,请动动您发财的小手点点赞呐!