当前位置: 首页 > news >正文

pdf查看密码

pdf有两种密码方式,一种是打开后进入文件内容页面后需要密码才能进行修改等操作,网上有很多方式进行移除密码操作,第二种是打开就需要密码,我这里简单记录一个暴力破解的方式,仅供参考

import PyPDF2
import itertools
import stringdef decrypt_pdf(input_file, output_file, password):with open(input_file, "rb") as file:reader = PyPDF2.PdfReader(file)if reader.is_encrypted:try:if reader.decrypt(password):writer = PyPDF2.PdfWriter()for page in reader.pages:writer.add_page(page)with open(output_file, "wb") as output_pdf_file:writer.write(output_pdf_file)print(f"解密后文件已保存为: {output_file}")return Trueelse:print(f"密码'{password}'错误")except Exception as e:print(f"解密失败: {e}")else:print("该 PDF 文件没有加密。")return Falsedef generate_passwords(length):characters = string.ascii_letters + string.digits  # 字母加数字方式 可以添加其他字符for password in itertools.product(characters, repeat=length):yield ''.join(password)if __name__ == "__main__":input_pdf_path = r"d:\"  # 输入你的加密 PDF 文件路径output_pdf_path = r"d:\"  # 输出解密后文件的路径# 尝试生成长度为1到4的所有可能的密码for length in range(1, 5):  # 可调整最大长度print(f"尝试长度为 {length} 的密码...")for password in generate_passwords(length):if decrypt_pdf(input_pdf_path, output_pdf_path, password):break

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android 14适配
  • Swift 6.0 如何更优雅的抛出和处理特定类型的错误
  • 每日一问:为什么MySQL索引使用B+树? 第4版 (含时间复杂度对比表格)
  • JVM感知docker容器内存资源限制
  • Blender----利用DEM(tif)生成三维模型
  • 解读红外控制遥控器原理!!!
  • Pytest框架直接右键运行 testcase.py,不执行最外层conftest
  • CACTER直播预告:聚焦EDLP邮件数据防泄露实战重点
  • 基于STM32+手机APP设计的智能停车场系统——程序源码原理图设计原理设计文档演示视频框图等(文末工程资料下载)
  • 数据仓库: 4- 数据质量管理 5- 元数据管理
  • 监控用户登录信息,执行事务码情况
  • websocket的介绍及springBoot集成示例
  • 小区物业维修管理系统/小区居民报修系统
  • html+css+js网页设计 专业:珠宝行业宏观环境分析12个页面
  • AC自动机-2(AhoCorasickDoubleArrayTrie)
  • angular2 简述
  • ES6 学习笔记(一)let,const和解构赋值
  • gitlab-ci配置详解(一)
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Material Design
  • MaxCompute访问TableStore(OTS) 数据
  • mysql_config not found
  • passportjs 源码分析
  • Solarized Scheme
  • SpringCloud集成分布式事务LCN (一)
  • 从零搭建Koa2 Server
  • 当SetTimeout遇到了字符串
  • 番外篇1:在Windows环境下安装JDK
  • 开发基于以太坊智能合约的DApp
  • 来,膜拜下android roadmap,强大的执行力
  • 前端
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 设计模式走一遍---观察者模式
  • 什么软件可以剪辑音乐?
  • 听说你叫Java(二)–Servlet请求
  • 阿里云服务器购买完整流程
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # Redis 入门到精通(一)数据类型(4)
  • #stm32整理(一)flash读写
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (1)svelte 教程:hello world
  • (9)目标检测_SSD的原理
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (简单) HDU 2612 Find a way,BFS。
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)nsfocus-绿盟科技笔试题目
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .md即markdown文件的基本常用编写语法
  • .net快速开发框架源码分享
  • .NET企业级应用架构设计系列之技术选型
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示