利用Python破解PDF文档密码(pyPDF2模块并不可用)
""
开始尝试用python的第三方库pyPDF2来破解PDF文档的密码,结果运行的时候报错:
"NotImplementedError: only algorithm code 1 and 2 are supported" 提示不支持该加密算法。
只能放弃这个模块,哈哈,而且看了一下这个模块的官方网站,似乎已经很久都没有更新了!
经过查询,发现pikepdf模块可以支持,废话少说直接上代码
""
from pikepdf import Pdf
import sys
import threading
import os
class PdfCracker:
def __init__(self, pdf_file, password_list):
self.pdf_file = pdf_file #要被破解的PDF文档文件名称
self.password_list = password_list #密码字典文件名称
def pdfer(self, password):
try:
Pdf.open(self.pdf_file, password=password) #Pdf的Open方法,如果密码正确,那么可以执行,否则会报错,因此可用except捕捉该错误
print("Found Password: %s" % password)
sys.exit() #如果找到文档的密码,那么也没必要继续执行下去了,直接退出程序
except:
pass
def blank_password(self): #这个方法是在尝试破解文档密码之前,确认一下该文档是否被加密,如果不是,那么给出提示后,可以退出程序
try:
Pdf.open(self.pdf_file)
print("The File is Not Encrypted!")
return True
except:
return False
def cracker(self):
res = self.blank_password()
if not res:
with open(self.password_list, 'r') as f:
for line in f.readlines():
pass_try = line.strip('\n').strip()
t = threading.Thread(target=self.pdfer, args=(pass_try,)) # 用多线程加快破解过程
t.start()
else:
sys.exit()
if __name__ == '__main__':
banner = """
****************************
PDF Brute Forcer By Jason
****************************
"""
print(banner)
pdf_file = input("Enter File Path To Crack: ")
if not os.path.exists(pdf_file):
print("The File Does Not Exist!")
sys.exit()
password_list = input("Enter File Path Of Dictionary: ")
if not os.path.exists(password_list):
print("The Dictionary Does Not Exist!")
sys.exit()
pdf_cracker = PdfCracker(pdf_file, password_list)
pdf_cracker.cracker()