PyPDF2 PDF解密问题求助:字典爆破未匹配已知正确密码
PDF字典解密无匹配提示问题排查
问题描述
我正在完成《Automate the Boring Stuff》中的PDF解密实践案例,采用字典猜解密码的方式。设置了含4个密码的测试列表,其中包含加密PDF的正确密码“password”,但代码运行后未输出密码匹配提示。参考网上同类方案使用if reader.decrypt(i) == 1:的判断逻辑,手动打开PDF时密码“password”完全有效,不清楚问题所在。
测试代码:
from PyPDF2 import PdfReader # 打开加密PDF并开始尝试解密 reader = PdfReader("15_Practise_Brute_Force.pdf") # 待测试的密码列表 pw = ["cake", "mother", "password", "star"] for i in pw: print(i) if reader.decrypt(i) == 1: print("Password is: ", i)
问题原因及解决办法
1. PyPDF2版本兼容性问题
PyPDF2的decrypt方法返回值规则在不同版本有明显变化:
- 旧版本(2.0之前):解密成功返回
1,失败返回0 - 新版本(2.0及以上):解密成功返回
True,失败返回False
你的代码使用==1的判断逻辑,若当前安装的是PyPDF2 2.0+版本,判断条件永远不成立,自然不会输出匹配提示。
2. 针对性解决
- 第一步:检查PyPDF2版本
执行以下命令查看当前版本:pip show PyPDF2 - 第二步:修改判断逻辑
如果版本≥2.0,直接修改判断语句:
或者更明确的写法:if reader.decrypt(i): print("Password is: ", i)
若需要兼容新旧版本,可同时判断两种返回值:if reader.decrypt(i) is True: print("Password is: ", i)decrypt_result = reader.decrypt(i) if decrypt_result == 1 or decrypt_result is True: print("Password is: ", i)
3. 额外验证项
- 确认PDF文件路径正确,避免因文件不存在导致的隐性错误
- 仔细核对密码拼写,确保测试列表中的"password"和PDF实际密码完全一致(包括大小写、特殊字符)
内容的提问来源于stack exchange,提问作者Schlossie
相关产品推荐
相关产品推荐

