[Python] 自動化辦公 暴力破解PDF密碼

轉(zhuǎn)載請注明:陳熹 chenx6542@foxmail.com (簡書號:半為花間酒)
若公眾號內(nèi)轉(zhuǎn)載請聯(lián)系公眾號:早起Python

這篇文章能學(xué)到的主要內(nèi)容:
PyPDF2 加密和解密操作

PDF 加密

在之前的文章 http://www.reibang.com/p/2d128f26ae7b 中簡單提到過加密一個 PDF 文件的方法,我們先拿自己隨意的一個PDF 文件試一下:

from PyPDF2 import PdfFileWriter, PdfFileReader
path = r'C:\xxx' # 這里填寫目標(biāo) 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') # 設(shè)置密碼為 a123
with open(path + r'\test.pdf', 'wb') as out:
    pdf_writer.write(out)

上面代碼的運(yùn)行邏輯是:實例化一個 PDF 寫入器和讀取器破托,讀取器讀取完目標(biāo) PDF 文件后,一頁一頁交給寫入器,然后對寫入器設(shè)置密碼并輸出。看一下運(yùn)行結(jié)果:

可見這個 PDF 文件成功設(shè)置上了密碼

PDF 已知密碼解密

如果知道密碼的情況下简软,想直接取消 PDF 的加密射众,可以用 .decrypt碟摆,解密的過程需要讀取器和寫入器共同配合。但區(qū)別于加密 .encrypt叨橱,.decrypt 是針對讀取器進(jìn)行解密的典蜕,而不是寫入器

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)

上面代碼的運(yùn)行邏輯是:首先用讀取器讀取加密文件,然后直接在讀取器上使用 .decrypt 進(jìn)行解密罗洗,逐頁傳到剛實例化的寫入器后統(tǒng)一輸出愉舔,就完成了解密

PDF 暴力解密

暴力破解,其實就是通過手上已經(jīng)有的密碼庫伙菜,或者完全通過數(shù)字轩缤、字母、符號的窮舉,將可能的密碼都放進(jìn)去典奉,逐個嘗試直到成功躺翻。
暴力破解只適用于已知密碼位數(shù)少,由簡單的數(shù)字卫玖、字母構(gòu)成

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

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 PdfFileReader

passw = []
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. 手術(shù)無密碼本,完全窮舉

首先介紹 itertools脱茉,可以構(gòu)建含需要組合的生成器供后續(xù)迭代:

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

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

import itertools
from PyPDF2 import PdfFileReader

mylist = ("".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}')
        break
    else:
        print(f'破解不成功琴许,密碼{i}錯誤')

最后也成功破解了
需要注意:但即使是這么簡單的組合也耗費(fèi)了一點時間税肪,如果復(fù)雜的密碼破解難度和破解時間就指數(shù)級增長了,暴力的窮舉法就不一定適用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末榜田,一起剝皮案震驚了整個濱河市益兄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌箭券,老刑警劉巖净捅,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辩块,居然都是意外死亡蛔六,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門废亭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來国章,“玉大人,你說我怎么就攤上這事豆村∽叫龋” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵你画,是天一觀的道長。 經(jīng)常有香客問我桃漾,道長坏匪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任撬统,我火速辦了婚禮适滓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恋追。我一直安慰自己凭迹,他們只是感情好罚屋,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嗅绸,像睡著了一般脾猛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鱼鸠,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天猛拴,我揣著相機(jī)與錄音,去河邊找鬼蚀狰。 笑死愉昆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的麻蹋。 我是一名探鬼主播跛溉,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扮授!你這毒婦竟也來了芳室?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤糙箍,失蹤者是張志新(化名)和其女友劉穎渤愁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體深夯,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抖格,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了咕晋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雹拄。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖掌呜,靈堂內(nèi)的尸體忽然破棺而出滓玖,到底是詐尸還是另有隱情,我是刑警寧澤质蕉,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布势篡,位于F島的核電站,受9級特大地震影響模暗,放射性物質(zhì)發(fā)生泄漏禁悠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一兑宇、第九天 我趴在偏房一處隱蔽的房頂上張望碍侦。 院中可真熱鬧,春花似錦、人聲如沸瓷产。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽濒旦。三九已至株旷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疤估,已是汗流浹背灾常。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留铃拇,地道東北人钞瀑。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像慷荔,于是被迫代替她去往敵國和親雕什。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容