PDF权限密码解密工具

[复制链接]
131 |12
发表于 2025-11-2 03:41:01 | 显示全部楼层 |阅读模式



[Python]  
  1. import os
  2. import tkinter as tk
  3. from tkinter import filedialog, messagebox, ttk
  4. from PyPDF2 import PdfReader, PdfWriter
  5. class PDFDecrypterApp:
  6.     def __init__(self, root):
  7.         self.root = root
  8.         self.root.title("PDF权限密码解密工具")
  9.         self.root.geometry("600x400")
  10.         self.root.resizable(True, True)
  11.         # 设置中文字体支持
  12.         self.root.option_add("*Font", "SimHei 10")
  13.         # 创建主框架
  14.         main_frame = ttk.Frame(root, padding="20")
  15.         main_frame.pack(fill=tk.BOTH, expand=True)
  16.         # 文件选择区域
  17.         ttk.Label(main_frame, text="源文件:").grid(row=0, column=0, sticky=tk.W, pady=5)
  18.         self.source_file_var = tk.StringVar()
  19.         ttk.Entry(main_frame, textvariable=self.source_file_var, width=50).grid(row=0, column=1, pady=5)
  20.         ttk.Button(main_frame, text="浏览...", command=self.browse_source_file).grid(row=0, column=2, padx=5, pady=5)
  21.         ttk.Label(main_frame, text="输出文件:").grid(row=1, column=0, sticky=tk.W, pady=5)
  22.         self.output_file_var = tk.StringVar()
  23.         ttk.Entry(main_frame, textvariable=self.output_file_var, width=50).grid(row=1, column=1, pady=5)
  24.         ttk.Button(main_frame, text="浏览...", command=self.browse_output_file).grid(row=1, column=2, padx=5, pady=5)
  25.         # 密码区域
  26.         ttk.Label(main_frame, text="打开密码(如果有):").grid(row=2, column=0, sticky=tk.W, pady=5)
  27.         self.password_var = tk.StringVar()
  28.         ttk.Entry(main_frame, textvariable=self.password_var, show="*", width=50).grid(row=2, column=1, pady=5)
  29.         # 解密按钮
  30.         self.decrypt_button = ttk.Button(main_frame, text="开始解密", command=self.decrypt_pdf)
  31.         self.decrypt_button.grid(row=3, column=1, pady=20)
  32.         # 状态区域
  33.         ttk.Label(main_frame, text="状态:").grid(row=4, column=0, sticky=tk.W, pady=5)
  34.         self.status_var = tk.StringVar()
  35.         self.status_var.set("就绪")
  36.         ttk.Label(main_frame, textvariable=self.status_var, anchor=tk.W).grid(row=4, column=1, sticky=tk.W, pady=5)
  37.         # 进度条
  38.         self.progress_var = tk.DoubleVar()
  39.         self.progress_bar = ttk.Progressbar(main_frame, variable=self.progress_var, length=100, mode='indeterminate')
  40.         self.progress_bar.grid(row=5, column=1, sticky=tk.W + tk.E, pady=5)
  41.         # 日志区域
  42.         ttk.Label(main_frame, text="操作日志:").grid(row=6, column=0, sticky=tk.NW, pady=5)
  43.         self.log_text = tk.Text(main_frame, height=10, width=70)
  44.         self.log_text.grid(row=6, column=1, pady=5)
  45.         scrollbar = ttk.Scrollbar(main_frame, command=self.log_text.yview)
  46.         scrollbar.grid(row=6, column=2, sticky=tk.N + tk.S)
  47.         self.log_text.config(yscrollcommand=scrollbar.set)
  48.         # 配置网格权重,使界面可伸缩
  49.         main_frame.columnconfigure(1, weight=1)
  50.         main_frame.rowconfigure(6, weight=1)
  51.         # 日志记录
  52.         self.log("欢迎使用PDF权限密码解密工具")
  53.         self.log("请选择需要解密的PDF文件并设置输出路径")
  54.     def browse_source_file(self):
  55.         filename = filedialog.askopenfilename(
  56.             title="选择PDF文件",
  57.             filetypes=[("PDF文件", "*.pdf"), ("所有文件", "*.*")]
  58.         )
  59.         if filename:
  60.             self.source_file_var.set(filename)
  61.             # 自动填充输出文件名
  62.             if not self.output_file_var.get():
  63.                 output_file = os.path.splitext(filename)[0] + "_解密.pdf"
  64.                 self.output_file_var.set(output_file)
  65.     def browse_output_file(self):
  66.         filename = filedialog.asksaveasfilename(
  67.             title="保存解密后的PDF文件",
  68.             defaultextension=".pdf",
  69.             filetypes=[("PDF文件", "*.pdf"), ("所有文件", "*.*")]
  70.         )
  71.         if filename:
  72.             self.output_file_var.set(filename)
  73.     def log(self, message):
  74.         """添加日志信息到日志区域"""
  75.         self.log_text.insert(tk.END, message + "\n")
  76.         self.log_text.see(tk.END)
  77.     def decrypt_pdf(self):
  78.         """执行PDF解密操作"""
  79.         source_file = self.source_file_var.get()
  80.         output_file = self.output_file_var.get()
  81.         password = self.password_var.get()
  82.         # 验证输入
  83.         if not source_file:
  84.             messagebox.showerror("错误", "请选择源PDF文件")
  85.             return
  86.         if not output_file:
  87.             messagebox.showerror("错误", "请设置输出文件路径")
  88.             return
  89.         if not os.path.exists(source_file):
  90.             messagebox.showerror("错误", f"源文件不存在: {source_file}")
  91.             return
  92.         try:
  93.             # 更新状态
  94.             self.status_var.set("正在解密...")
  95.             self.progress_bar.start()
  96.             self.decrypt_button.config(state=tk.DISABLED)
  97.             self.root.update()
  98.             self.log(f"开始处理: {source_file}")
  99.             self.log(f"输出文件: {output_file}")
  100.             # 执行解密
  101.             with open(source_file, 'rb') as file:
  102.                 reader = PdfReader(file)
  103.                 # 检查是否加密
  104.                 if reader.is_encrypted:
  105.                     self.log("检测到PDF已加密")
  106.                     if password:
  107.                         self.log("使用提供的密码尝试解密...")
  108.                         if not reader.decrypt(password):
  109.                             self.log("错误: 提供的密码不正确")
  110.                             messagebox.showerror("错误", "提供的密码不正确")
  111.                             return
  112.                     else:
  113.                         self.log("错误: PDF需要密码才能打开,但未提供密码")
  114.                         messagebox.showerror("错误", "PDF需要密码才能打开,但未提供密码")
  115.                         return
  116.                 # 创建写入器
  117.                 writer = PdfWriter()
  118.                 # 获取总页数
  119.                 total_pages = len(reader.pages)
  120.                 self.log(f"PDF总页数: {total_pages}")
  121.                 # 添加所有页面到写入器
  122.                 for i, page in enumerate(reader.pages):
  123.                     writer.add_page(page)
  124.                     # 更新进度
  125.                     progress = (i + 1) / total_pages * 100
  126.                     self.progress_var.set(progress)
  127.                     self.root.update()
  128.                 # 移除权限限制
  129.                 writer.encrypt("", use_128bit=True)
  130.                 # 写入新文件
  131.                 with open(output_file, 'wb') as output_file_obj:
  132.                     writer.write(output_file_obj)
  133.                 self.log("成功: PDF权限已解除")
  134.                 self.status_var.set("解密完成")
  135.                 messagebox.showinfo("成功", f"PDF权限已解除\n文件已保存至: {output_file}")
  136.         except Exception as e:
  137.             self.log(f"错误: 处理PDF时发生异常 - {str(e)}")
  138.             self.status_var.set("处理失败")
  139.             messagebox.showerror("错误", f"处理PDF时发生异常:\n{str(e)}")
  140.         finally:
  141.             self.progress_bar.stop()
  142.             self.decrypt_button.config(state=tk.NORMAL)
  143. if __name__ == "__main__":
  144.     root = tk.Tk()
  145.     app = PDFDecrypterApp(root)
  146.     root.mainloop()
复制代码

通过网盘分享的文件:PDF权限密码解密工具.exe
链接: https://pan.baidu.com/s/1PXujLuPGcH4bONhv_FJjmQ?pwd=52pj 提取码: 52pj

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表于 2025-11-2 03:41:28 | 显示全部楼层
https://wwai.lanzouu.com/in5kp30j7k7c
密码:a4ps

上个蓝奏吧,这毒盘下着难受

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表于 2025-11-2 03:42:08 | 显示全部楼层
这个起到个什么作用了,我知道密码不就自己打开了吗?
回复

使用道具 举报

发表于 2025-11-2 03:43:01 | 显示全部楼层
能直接打开的PDF,但是提示未提供密码
回复

使用道具 举报

发表于 2025-11-2 03:43:39 | 显示全部楼层
没作用啊
回复

使用道具 举报

发表于 2025-11-2 03:43:59 | 显示全部楼层
谢谢分享作品
回复

使用道具 举报

发表于 2025-11-2 03:44:12 | 显示全部楼层
这个软件是暴破吗?没有密码也可以?
回复

使用道具 举报

发表于 2025-11-2 03:44:26 | 显示全部楼层
简单有效,图形界面,很好。今日论坛两人都在发pdf密码解除工具,都很赞!
回复

使用道具 举报

发表于 2025-11-2 03:44:52 | 显示全部楼层
遇到一个PDF,有签名加密,用这软件解密时候提示要我输入密码,可是并没有密码。
回复

使用道具 举报

发表于 2025-11-2 03:45:35 | 显示全部楼层
简单有效,感谢分享优秀软件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表