欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python使用pypdf2實現(xiàn)pdf文檔解密

 更新時間:2023年12月25日 12:09:26   作者:不當(dāng)王多魚不改名  
利用pypdf2完成pdf的解密,這里的事例是python3環(huán)境下的,當(dāng)然python2下也可以運行,只需要修改名稱即可,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下

用python完成PDF的解密?。。。?!代碼直接可以運行!)

用python的庫函數(shù)pypdf2完成解密,如果不會用python的小伙伴別擔(dān)心,直接點總結(jié)看最暴力最直接的辦法(在線解密)

前言

利用pypdf2完成pdf的解密,這里的事例是python3環(huán)境下的,當(dāng)然python2下也可以運行,只需要修改名稱即可,在代碼中有修改的地方,筆者也會指出,看完這篇你不會解密pdf的話?。?!那我就再寫一篇。

一、導(dǎo)入庫函數(shù)

這里用到的模塊有pypdf2、pycryptodome,如果沒有模塊的需要在對應(yīng)的虛擬環(huán)境中執(zhí)行以下的pip安裝命令

pip install pypdf2
pip install pycryptodome

二、主要函數(shù)解讀

1.引入庫

如果是python2的在引入函數(shù)方法的時候需要改一下,如果是python3的就直接復(fù)制下面代碼就好

from PyPDF2 import PdfReader #pdf的讀取方法
from PyPDF2 import PdfWriter #pdf的寫入方法
"""
如果是python2的將上面的PdfReader和PdfWriter改為
PdfFileReader和PDFfileWriter即可
"""
from Crypto.Cipher import AES #高加密的方法,要引入不然會報錯

2.自定義pdf讀取函數(shù)

python2需要修改的地方在代碼中已經(jīng)標(biāo)注,python3的直接復(fù)制下面代碼即可

def get_reader(filename, password): #讀取pdf的方法(自定義函數(shù))
    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: #解密操作(以下操作是自適應(yīng),不會展示在終端中)
        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文件已經(jīng)在本地了就關(guān)閉
    return pdf_reader #返回讀出pdf的值

3.自定義pdf生成函數(shù)

將加密的文件及逆行解密,并生成一個無需密碼pdf文件,下面是生成函數(shù)deception_pdf的基本參數(shù)

filename: 原先加密的pdf文件名稱

password: 原文件對應(yīng)的密碼

decrypted_filename: 解密之后的文件名

def deception_pdf(filename, password, decrypted_filename=None): #生成新pdf的方法(自定義函數(shù))
    print('正在生成解密...')
    #得到傳入的文件名和密碼(這里不用做修改)
    pdf_reader = get_reader(filename, password) 
    if pdf_reader is None:
        return print("無內(nèi)容讀取")

    """如果是python2將is_encrypted改為isEncrypted"""
    elif not pdf_reader.is_encrypted:
        return print('文件沒有被加密,無需操作')

    """如果是python2將PdfWriter改為PdfFileWriter"""
    pdf_writer = PdfWriter() #寫pdf(記錄pdf內(nèi)容)

    """如果是python2將append_pages_from_reader改為appendPagesFromReader"""
    pdf_writer.append_pages_from_reader(pdf_reader)

    if decrypted_filename is None: #創(chuàng)建解密后的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的方法(自定義函數(shù))
    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: #解密操作(以下操作是自適應(yīng),不會展示在終端中)
        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文件已經(jīng)在本地了就關(guān)閉
    return pdf_reader #返回讀出pdf的值
    
def deception_pdf(filename, password, decrypted_filename=None): #生成新pdf的方法(自定義函數(shù))
    print('正在生成解密...')
    pdf_reader = get_reader(filename, password) #得到傳入的文件名,和密碼(如果密碼沒有可以不填)
    if pdf_reader is None:
        return print("無內(nèi)容讀取")

    # 如果是python2將is_encrypted改為isEncrypted
    elif not pdf_reader.is_encrypted:
        return print('文件沒有被加密,無需操作')

    # 如果是python2將PdfWriter改為PdfFileWriter
    pdf_writer = PdfWriter() #寫pdf(記錄pdf內(nèi)容)

    #如果是python2將append_pages_from_reader改為appendPagesFromReader
    pdf_writer.append_pages_from_reader(pdf_reader)

    if decrypted_filename is None: #創(chuàng)建解密后的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:\考研\(zhòng)301數(shù)學(xué)一\數(shù)學(xué)書\數(shù)學(xué)書\2024kaoyanmath1.pdf', '')

使用方法:
 

我們要先得到需要解密的文件路徑,如下看到我們的文件路徑為(?E:\考研\(zhòng)301數(shù)學(xué)一\數(shù)學(xué)書\數(shù)學(xué)書\2024kaoyanmath1.pdf)復(fù)制后,再黏貼到代碼中的指定位置即可

在這里插入圖片描述

在這里插入圖片描述

為了看到直觀效果,我們看到這里的原文件是被加密的,接下來我們運行上面的代碼然后再來看看效果

在這里插入圖片描述

我們接著運行代碼,接著指向的地址看

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

我們看到解密后的文件因為取消了加密權(quán)限,文件的大小也小了點

在這里插入圖片描述

總結(jié)

以上就是python使用pypdf2實現(xiàn)pdf文檔解密的詳細(xì)內(nèi)容,更多關(guān)于python pypdf2實現(xiàn)pdf解密的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python小知識之幾種推導(dǎo)式用法示例

    Python小知識之幾種推導(dǎo)式用法示例

    Python推導(dǎo)式是一種獨特的數(shù)據(jù)處理方式,可以從一個數(shù)據(jù)序列構(gòu)建另一個新的數(shù)據(jù)序列的結(jié)構(gòu)體,下面這篇文章主要給大家介紹了關(guān)于Python小知識之幾種推導(dǎo)式用法的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Python使用xpath對解析內(nèi)容進行數(shù)據(jù)提取

    Python使用xpath對解析內(nèi)容進行數(shù)據(jù)提取

    XPath 使用路徑表達式來選取HTML/ XML 文檔中的節(jié)點或節(jié)點集,節(jié)點是通過沿著路徑 (path) 或者步 (steps) 來選取的,本文將給大家介紹Python使用xpath對解析內(nèi)容進行數(shù)據(jù)提取的方法,需要的朋友可以參考下
    2024-05-05
  • 安裝python-docx后,無法在pycharm中導(dǎo)入的解決方案

    安裝python-docx后,無法在pycharm中導(dǎo)入的解決方案

    這篇文章主要介紹了安裝python-docx后,無法在pycharm中導(dǎo)入的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • pytorch教程resnet.py的實現(xiàn)文件源碼分析

    pytorch教程resnet.py的實現(xiàn)文件源碼分析

    torchvision.models這個包中包含alexnet、densenet、inception、resnet、squeezenet、vgg等常用的網(wǎng)絡(luò)結(jié)構(gòu),并且提供了預(yù)訓(xùn)練模型,可以通過簡單調(diào)用來讀取網(wǎng)絡(luò)結(jié)構(gòu)和預(yù)訓(xùn)練模型
    2021-09-09
  • ???????如何利用python破解zip加密文件

    ???????如何利用python破解zip加密文件

    這篇文章主要介紹了???????如何利用python破解zip加密文件,文章基于python的相關(guān)資料展開破解zip加密文件的詳細(xì)內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-05-05
  • 對python 讀取線的shp文件實例詳解

    對python 讀取線的shp文件實例詳解

    今天小編就為大家分享一篇對python 讀取線的shp文件實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python YAML文件的讀寫操作詳解

    Python YAML文件的讀寫操作詳解

    這篇文章主要介紹了Python讀寫yaml文件,yaml 是專門用來寫配置文件的語言,非常簡潔和強大,之前用ini也能寫配置文件,有點類似于json格式,下面關(guān)于Python讀寫yaml文件的詳細(xì)資料,需要的小伙伴可以參考一下
    2022-08-08
  • 用 Django 開發(fā)一個 Python Web API的方法步驟

    用 Django 開發(fā)一個 Python Web API的方法步驟

    這篇文章主要介紹了用 Django 開發(fā)一個 Python Web API的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python圖片剪裁代碼(圖片按四個點坐標(biāo)剪裁)

    python圖片剪裁代碼(圖片按四個點坐標(biāo)剪裁)

    這篇文章主要介紹了python圖片剪裁代碼(圖片按四個點坐標(biāo)剪裁),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python顯示進度條的方法

    Python顯示進度條的方法

    這篇文章主要介紹了Python顯示進度條的方法,以實例的形式進行了詳細(xì)的分析,是一個非常實用的技巧,需要的朋友可以參考下
    2014-09-09

最新評論