利用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()

    

posted @ 2022-03-26 11:19  Jason_huawen  阅读(1103)  评论(0编辑  收藏  举报