日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

实用脚本!利用 Python 对 PDF 进行加密、解密操作,代码拿走就用!

發布時間:2024/9/15 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实用脚本!利用 Python 对 PDF 进行加密、解密操作,代码拿走就用! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源/早起Python

本文將分享如何利用 Python 對 PDF 進行加密和解密操作,主要利用到之前多次介紹過的PyPDF2 模塊。

PDF 加密

在之前的文章PDF合并、拆分、水印、加密中簡單提到過加密一個 PDF 文件的方法,我們先拿自己隨意的一個PDF 文件試一下:

from?PyPDF2?import?PdfFileWriter,?PdfFileReader path?=?r'C:\xxx'?#?這里填寫目標?PDF?所在的路徑pdf_reader?=?PdfFileReader(path?+?r'\test.pdf') pdf_writer?=?PdfFileWriter()for?page?in?range(pdf_reader.getNumPages()):pdf_writer.addPage(pdf_reader.getPage(page)) pdf_writer.encrypt('a123')?#?設置密碼為?a123 with?open(path?+?r'\test.pdf',?'wb')?as?out:pdf_writer.write(out)

上面代碼的運行邏輯是:實例化一個 PDF 寫入器和讀取器,讀取器讀取完目標 PDF 文件后,一頁一頁交給寫入器,然后對寫入器設置密碼并輸出。看一下運行結果:

可見這個 PDF 文件成功設置上了密碼,如果有多個PDF需要加密,可以寫一個簡單的循環利用上述腳本批量處理,此處不再展開說明。

PDF 已知密碼解密

如果知道密碼的情況下,想直接取消 PDF 的加密,可以用 .decrypt,解密的過程需要讀取器和寫入器共同配合。但區別于加密 .encrypt,.decrypt 是針對讀取器進行解密的,而不是寫入器

from?PyPDF2?import?PdfFileWriter,?PdfFileReader path?=?r'C:\xxx'pdf_reader?=?PdfFileReader(path?+?r'\test.pdf') pdf_reader.decrypt('a123')?# pdf_writer?=?PdfFileWriter()for?page?in?range(pdf_reader.getNumPages()):pdf_writer.addPage(pdf_reader.getPage(page)) with?open(path?+?r'\test.pdf',?'wb')?as?out:pdf_writer.write(out)

上面代碼的運行邏輯是:首先用讀取器讀取加密文件,然后直接在讀取器上使用 .decrypt 進行解密,逐頁傳到剛實例化的寫入器后統一輸出,就完成了解密

PDF 暴力解密

暴力破解,其實就是通過手上已經有的密碼庫,或者完全通過數字、字母、符號的窮舉,將可能的密碼都放進去,逐個嘗試直到成功。

「目前暴力破解只適用于已知密碼位數少,由簡單的數字、字母構成」

假設今天要破解的密碼就是 a123,已知密碼 4 位且由數字和小寫字母組成。破解又分為兩種情況:

1. 手上有密碼本

第一種情況,知道大概密碼,可以整理成一個 password.txt ,保證可能的密碼一定在其中:

首先讀取 .txt 文件獲取其中所有密碼(示例文件只有 9 個密碼):

passw?=?[] path?=?r'C:\Scientific?Research\Python' file?=?open(path?+?r'\password.txt') for?line?in?file.readlines():passw.append(line.strip()) print(passw) file.close()

然后就可以用密碼本的密碼做暴力破解:

from?PyPDF2?import?PdfFileReaderpassw?=?[] path?=?r'C:\xxx' file?=?open(path?+?r'\password.txt') for?line?in?file.readlines():passw.append(line.strip()) file.close()path?=?r'C:\xxx' pdf_reader?=?PdfFileReader(path?+?r'\test).pdf')for?i?in?passw:if?pdf_reader.decrypt(i):print(f'破解成功,密碼為{i}')else:print(f'破解不成功,密碼{i}錯誤')

2. 手術無密碼本,完全窮舉

首先介紹 itertools,可以構建含需要組合的生成器供后續迭代:

import?itertools mylist?=?("".join(x)?for?x?in?itertools.product("0123456789abcdef",?repeat=4)) print(next(mylist))

利用這個方法就可以用 while 循環嘗試暴力破解(為了減少時間,生成器用"abc123"生成組合):

import?itertools from?PyPDF2?import?PdfFileReadermylist?=?("".join(x)?for?x?in?itertools.product("123abc",?repeat=4)) path?=?r'C:\xxx' pdf_reader?=?PdfFileReader(path?+?r'\test.pdf')while?True:i?=?next(mylist)if?pdf_reader.decrypt(i):print(f'破解成功,密碼為{i}')breakelse:print(f'破解不成功,密碼{i}錯誤')

可以看到最后也成功破解了,但需要注意:但即使是這么簡單的組合也耗費了一點時間,如果復雜的密碼破解難度和破解時間就指數級增長了,暴力的窮舉法就不一定適用,可以根據需求具體調整規則,縮小范圍再進行嘗試。

推薦閱讀

Pandas處理數據太慢,來試試Polars吧!

懶人必備!只需一行代碼,就能導入所有的Python庫

絕!關于pip的15個使用小技巧

介紹10個常用的Python內置函數,99.99%的人都在用!

可能是全網最完整的 Python 操作 Excel庫總結!

總結

以上是生活随笔為你收集整理的实用脚本!利用 Python 对 PDF 进行加密、解密操作,代码拿走就用!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。