Python-PDF文件密码破解小工具

PDF文件密码破解小工具

背景

经常从网络上下载的PDF笔记被加了密,在自己学习的过程中想要添加书签却因为没有密码无法添加,所以通过Python实现一个解密小工具,亲测大多数密码都可以破解。

代码

import os
import tkinter as tk
from tkinter import filedialog
#pdf的读取方法
from PyPDF2 import PdfReader
#pdf的写入方法
from PyPDF2 import PdfWriter
#高加密的方法,要引入不然会报错
from Crypto.Cipher import AES
# 该脚本使用Python3def select_input_file(root, input_file_path_var):input_file_path = filedialog.askopenfilename(filetypes=[("PDF files", "*.PDF;*.pdf")])if input_file_path:input_file_path_var.delete(0, tk.END)input_file_path_var.insert(0, input_file_path)return input_file_path# 定义一个函数来读取PDF文件
def get_reader(filename, password):try:old_file = open(filename, 'rb')print('解密开始...')except Exception as err:return print('文件打开失败!' + str(err))#如果使用python2需要将PdfReader改为PdfFileReaderpdf_reader = PdfReader(old_file, strict=False)# 如果使用python2需要将is_encrypted改为isEncrypted# 执行解密操作if pdf_reader.is_encrypted: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()# 返回结果return pdf_readerdef deception_pdf(root,filename, password, decrypted_filename=None):print('正在生成解密...')pdf_reader = get_reader(filename, password)if pdf_reader is None:return print("无内容读取")# 如果使用python2需要将is_encrypted改为isEncryptedelif not pdf_reader.is_encrypted:return print('文件没有被加密,无需操作')# 如果使用的是python2需要将PdfWriter改为PdfFileWriterpdf_writer = PdfWriter()#如果使用的是python2需要将将append_pages_from_reader改为appendPagesFromReaderpdf_writer.append_pages_from_reader(pdf_reader)#创建解密后的pdf文件和展示文件的路径if decrypted_filename is None:decrypted_filename = "".join(filename.split('.')[:-1]) + '_' + '已解密' + '.pdf'print("解密文件已生成:{}".format(decrypted_filename))# 写入新文件pdf_writer.write(open(decrypted_filename, 'wb'))root.destroy()# 创建主函数
def main():# 创建主窗口root = tk.Tk()root.title("PDF解密小工具")# 创建一个Tkinter变量来存储文件路径input_file_path_var = tk.StringVar()# 输入文件框input_frame = tk.Frame(root)input_frame.pack(pady=10)input_label = tk.Label(input_frame, text="输入文件:")input_label.pack(side=tk.LEFT)input_file_path_var = tk.Entry(input_frame, width=50)input_file_path_var.pack(side=tk.LEFT)input_button = tk.Button(input_frame, text="选择文件", command=lambda:select_input_file(root,input_file_path_var))input_button.pack(side=tk.LEFT)# 创建按钮用于执行脚本execute_button = tk.Button(root, text="执行脚本", command=lambda:deception_pdf(root,input_file_path_var.get(), ''))execute_button.pack(pady=5)# 运行Tkinter事件循环root.mainloop()if __name__ == "__main__":main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/34984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你还不知道Modbus RTU???

1. 什么是Modbus RTU Modbus RTU(Remote Terminal Unit)是Modbus通信协议的一种变种,用于串行通信。它是一种常见的工业控制系统通信协议,通常用于采集传感器数据、控制执行器和监控设备状态。Modbus RTU采用二进制编码&#xff0…

基于ruoyi-app的手机短信登录(uniapp)

本篇用于记录h5的框架搭建 组件地址:短信验证码登陆&#xff0c;手机号&#xff0c;验证码倒计时 - DCloud 插件市场 调整后的表单组件代码: <template><view class"login-view"><!-- <input type"tel" confirm-type"确认"…

073、类的三大特征初识

&#xff08;1&#xff09;继承 类之间可以通过继承建立父子关系&#xff0c;子类可以继承父类的属性和方法&#xff0c;并可以添加自己的特定属性和方法。如下是一个简单示例&#xff1a; class Student(Person):def __init__(self, name, age, student_id):super().__init_…

Follow Carl To Grow|【LeetCode】93.复原IP地址,78.子集,90.子集II

【LeetCode】93.复原IP地址 题意&#xff1a;有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&…

【深度学习】实现基于MNIST数据集的TensorFlow/Keras深度学习案例

基于TensorFlow/Keras的深度学习案例 实现基于MNIST数据集的TensorFlow/Keras深度学习案例0. 什么是深度学习&#xff1f;1. TensorFlow简介2. Keras简介3. 安装TensorFlow前的注意事项4. 安装Anaconda3及搭建TensorFlow环境1&#xff09; 下载安装Anaconda Navigator2&#xf…

go语言day06 数组 切片

数组 : 定长且元素类型一致,在索引逻辑上连续存储,数组的内存地址是存储的第一个元素的内存地址 几种创建方式: 仅声明 var nums [ 3 ] int 声明并赋值 var nums [ 2 ] string {"武沛齐","alex"} 声明并按下标赋值 var nums [ 3 ] int {0:88,2:1 } 省略…

ffmpeg+nginx+video实现rtsp流转hls流,web页面播放

项目场景&#xff1a; 最近调试海康摄像头需要将rtsp流在html页面播放,因为不想去折腾推拉流&#xff0c;所以我选择ffmpeg转hls流&#xff0c;nginx转发&#xff0c;html直接访问就好了 1.首先要下载nginx和ffmpeg 附上下载地址&#xff1a; nginx nginx news ffmpeg htt…

HttpServletRequest・getContentLeng・getContentType区别

getContentLength()&#xff1a; 获取客户端发送到服务器的HTTP请求主体内容的字节数&#xff08;长度&#xff09; 如果请求没有正文内容&#xff08;如GET&#xff09;&#xff0c;或者请求头中没有包含Content-Length字段&#xff0c;则该方法返回 -1 getContentType()&am…

eclipse中svn从分支合并到主干及冲突解决

1、将分支先commit&#xff0c;然后再update&#xff0c;然后再clean一下&#xff0c;将项目多余的target都清理掉。 2、将branches切换到trunk 3、工程上右键-》Team-》合并&#xff08;或Merge&#xff09; 4、默认选项&#xff0c;点击Next 5、有未提交的改动&#xff0c;…

文献阅读:通过双线性建模来破译神经元类型连接的遗传密码

文献介绍 文献题目 Deciphering the genetic code of neuronal type connectivity through bilinear modeling 研究团队 Mu Qiao&#xff08;美国加州理工学院&#xff09; 发表时间 2024-06-10 发表期刊 eLife 影响因子 7.7 DOI 10.7554/eLife.91532.3 摘要 了解不同神经元…

打造爆款秘籍:阿里巴巴国际站测评补单优势全攻略

在阿里巴巴国际站&#xff0c;买家复购率和其他销售指标是衡量产品市场潜力和销售成功与否的关键指标。当系统评估出产品具有巨大的市场潜力时&#xff0c;它会相应地增加对产品的流量支持&#xff1b;反之&#xff0c;如果潜力不足&#xff0c;产品的排名将会受到影响&#xf…

Node官网下载各个版本

node官网下载各个版本地址 例如 14.16.0 Index of /download/release/v14.16.0/

使用 Spring Boot 3.x 与图形学技术,添加电子印章防伪特征

使用 Spring Boot 3.x 与图形学技术,添加电子印章防伪特征 在电子办公和无纸化办公日益普及的今天,电子印章的使用越来越广泛。然而,如何确保电子印章的安全性和防伪能力成为了一个亟待解决的问题。本文将通过 Spring Boot 3.x 和图形学技术,深入探讨如何为电子印章添加防…

Redis-实战篇-什么是缓存-添加redis缓存

文章目录 1、什么是缓存2、添加商户缓存3、前端接口4、ShopController.java5、ShopServiceImpl.java6、RedisConstants.java7、查看Redis Desktop Manager 1、什么是缓存 缓存就是数据交换的缓冲区&#xff08;称为Cache&#xff09;&#xff0c;是存贮数据的临时地方&#xff…

MATLAB--矩阵()

文章目录 前言概念矩阵构造 前言 MATLAB作为数学软件计算软件&#xff0c;对于数学运算的性能十分优越&#xff0c;本文作为MATLAB记录关于在MATLAB中关于矩阵的知识。如有错误&#xff0c;还望指正。 概念 在数学上矩阵的定义&#xff1a;由m*n个aij(i1,2…… ,m;j1,2……,…

C# 实战-三种类型的Timer

在C#中&#xff0c;主要有三种类型的Timer&#xff1a; System.Windows.Forms.Timer System.Timers.Timer System.Threading.Timer 以下是每种Timer的简要说明和示例&#xff1a; 1. System.Windows.Forms.Timer 用于Windows Forms应用程序&#xff0c;适合在UI线程中使用。…

【C++ Primer Plus学习记录】函数的基本知识

要使用C函数&#xff0c;必须完成如下工作&#xff1a; 提供函数定义 提供函数原型 调用函数 1.定义函数 可以将函数分为两类&#xff1a;没有返回值的函数和有返回值的函数。 没有返回值的函数被称为void函数&#xff0c;其通用格式如下&#xff1a; void functionName…

编程语言中的语法符号和标识符

编程语言中的语法符号和标识符 语法符号是编程语言中用于结构化和组织代码的符号&#xff0c;而标识符是用于标识和命名代码中的元素&#xff0c;使其具有唯一性和可识别性。它们在编程语言中发挥不同的作用&#xff0c;但共同构成了编程语言的语法体系和代码的组织方式。 语…

微博数据分析

微博运营数据分析 满足入场运营需要&#xff0c;用数据指导提升 数据端管理中心 微博后台的日常运营数据 大数据实验室-微分析 单挑微博数据分析 知微工具&#xff08;www.weiboreach.com&#xff09; 分析内容&#xff1a; 传播情况&#xff1a; 曝光量什么时间有什么…

01数字电子技术基础

第一节课&#xff1a;introduction 导论 决定了这门课的学习方法、学习内容、一个大概的把握、虽不是具体的技术&#xff0c;不是细节&#xff0c;但是这是一节思想 每门课都重要&#xff0c;但侧重点不同。 学习前人的思想和营养&#xff0c;为自己所用。 1.课程性质&#x…