档案软件解密不便?手把手教你Python脚本自动解密
一、核心方案与准备工作
面对档案软件繁琐的点击式解密或无法批量处理的痛点,最直接的解决方案是利用Python脚本调用底层库进行自动化处理。本方案采用pikepdf库,它基于QPDF,能够高效处理加密PDF文件,支持暴力破解或字典攻击,且能修复受损PDF,非常适合处理大量档案文件。
在开始之前,请确保你的电脑上已经安装了Python环境。如果没有,请访问Python官网下载安装包:
下载地址:https://www.python.org/downloads/
安装时,务必勾选"Add Python to PATH"选项,这能避免后续配置环境变量的麻烦。建议选择Python 3.9及以上版本以获得最佳性能。
二、Python环境与依赖库安装
环境搭建是第一步,我们需要安装核心依赖库pikepdf用于解密,以及tqdm用于显示进度条,方便监控大批量文件的处理进度。
打开终端(Windows下按Win+R输入cmd,Mac下打开Terminal),依次执行以下命令:
pip install pikepdf
pip install tqdm
如果下载速度较慢,建议使用国内镜像源加速安装:
pip install pikepdf tqdm -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后,可以通过命令pip list查看是否已成功安装这两个库。
三、多线程解密脚本编写
为了提高解密效率,我们将编写一个支持多进程的脚本。该脚本会自动扫描指定目录下的所有PDF文件,并根据提供的密码列表进行尝试解密。
请在电脑上新建一个文件夹,例如命名为PDF_Decrypt_Tool,在该文件夹下新建一个文本文件,将以下代码完整复制进去,并将文件重命名为decrypt.py。
import os
import pikepdf
from tqdm import tqdm
from concurrent.futures import ProcessPoolExecutor, as_completed
配置区域
INPUT_FOLDER = './encrypted_files' 存放加密PDF的文件夹
OUTPUT_FOLDER = './decrypted_files' 存放解密后PDF的文件夹
PASSWORD_LIST = ['123456', 'admin', 'password', '123456789', '000000'] 常用密码列表
MAX_WORKERS = 4 最大并发进程数,建议根据CPU核心数调整
def ensure_dir(directory):
if not os.path.exists(directory):
os.makedirs(directory)
def try_decrypt(file_path, save_path):
file_name = os.path.basename(file_path)
尝试空密码
try:
with pikepdf.open(file_path) as pdf:
pdf.save(save_path)
return f"{file_name}: 解密成功 (无密码)"
except Exception:
pass
尝试密码列表
for pwd in PASSWORD_LIST:
try:
with pikepdf.open(file_path, password=pwd) as pdf:
pdf.save(save_path)
return f"{file_name}: 解密成功 (密码: {pwd})"
except Exception:
continue
return f"{file_name}: 解密失败"
def process_file(args):
file_path, output_folder = args
file_name = os.path.basename(file_path)
save_path = os.path.join(output_folder, f"unlocked_{file_name}")
return try_decrypt(file_path, save_path)
def main():
ensure_dir(OUTPUT_FOLDER)
获取所有PDF文件
files = [os.path.join(INPUT_FOLDER, f) for f in os.listdir(INPUT_FOLDER) if f.lower().endswith('.pdf')]
if not files:
print("未在文件夹中找到PDF文件,请检查路径。")
return
print(f"开始处理,共发现 {len(files)} 个文件...")
使用多进程池
with ProcessPoolExecutor(max_workers=MAX_WORKERS) as executor:
futures = [executor.submit(process_file, (f, OUTPUT_FOLDER)) for f in files]
for future in tqdm(as_completed(futures), total=len(files), desc="处理进度"):
result = future.result()
可以选择将结果写入日志文件,这里直接打印关键信息
if "成功" in result:
print(result)
if __name__ == '__main__':
main()
代码核心逻辑解析:
- 配置区域:代码顶部的变量可以直接修改。你可以设置输入输出文件夹,并在
PASSWORD_LIST中填入你常用的档案密码,脚本会依次尝试。 - try_decrypt函数:这是解密的核心。首先尝试打开无密码文件,如果失败,则遍历密码列表。一旦
pikepdf.open成功打开文件,即视为解密成功,并立即保存到输出目录。 - 多进程处理:使用
ProcessPoolExecutor开启多进程,能够充分利用多核CPU性能,在处理几百上千个文件时,速度比单线程快数倍。
四、密码字典与目录配置
为了让脚本正常运行,必须严格按照代码中的配置建立目录结构。
1. 在PDF_Decrypt_Tool文件夹下,新建一个文件夹命名为encrypted_files。
2. 将所有需要解密的PDF文件全部拖入encrypted_files文件夹中。

3. 如果你的密码比较复杂,建议创建一个passwords.txt文件,将所有可能的密码一行一个写进去。然后修改代码中的读取逻辑(本指南为了零门槛,直接将密码写在代码列表中,如果需要读取txt文件,可将PASSWORD_LIST改为open('passwords.txt').read().splitlines())。
注意:脚本运行成功后,会在同级目录下自动生成decrypted_files文件夹,解密后的文件会带有unlocked_前缀,方便区分。
五、打包为独立可执行程序
考虑到部分操作人员可能没有Python环境,我们可以使用PyInstaller将脚本打包成一个独立的.exe文件,这样可以在任何Windows电脑上直接双击运行。
1. 安装PyInstaller:
pip install pyinstaller
2. 在终端中,进入PDF_Decrypt_Tool目录,执行以下打包命令:
pyinstaller -F -n AutoDecrypt decrypt.py
参数说明:
- -F: 表示打包成单个exe文件,而不是生成一堆依赖文件。
- -n AutoDecrypt: 给生成的exe文件命名为
AutoDecrypt。
3. 打包完成后,在当前目录下的dist文件夹中,你会找到AutoDecrypt.exe。将这个exe文件复制到包含encrypted_files文件夹的目录中即可直接运行。
六、常见报错与处理
在实际操作中,可能会遇到以下几种情况,请对照排查:
1. pikepdf._qpdf.QPDFError: unable to open file: file is not a valid PDF
这说明文件不是PDF格式,或者文件头已损坏。请检查文件扩展名是否被手动修改过,或者文件本身下载不完整。脚本会自动跳过此类错误并继续处理下一个文件。
2. PermissionError: [Errno 13] Permission denied
这是权限问题。请确保encrypted_files文件夹中的文件没有被其他程序(如Word、阅读器)打开。另外,不要将exe文件放在需要管理员权限的C盘系统目录下。
3. 所有文件都提示解密失败
请检查PASSWORD_LIST中的密码是否正确。如果密码是随机且未知的,脚本无法通过穷举解密。这种情况下,必须从档案管理员处获取正确的密码并更新到代码列表中。