首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蛮力搜索python中的pdf密码

蛮力搜索python中的pdf密码
EN

Code Review用户
提问于 2022-10-17 20:27:57
回答 3查看 316关注 0票数 6

我把密码忘在pdf上了。我记得一些字符,所以我用Python编写了一个简单的密码破解程序。文档现在是否丢失了,给出了组合数?出于好奇,我怎样才能尽可能地加速这个计划呢?

代码语言:javascript
复制
from pikepdf import open
from itertools import  product
from math import factorial

c = '12A3ca9€'
c = sorted(set(c))
length = len(c)
total = ( (1-(length**(length+1)))/(1-length) ) - 1

s = 0
for s2 in range(length):
    s2 += 1
    m = product(c, repeat=s2)
    for i in m:
        try:
            with open(r"C:\Users\User\Desktop\Document.pdf", password=''.join(i)) as pdf:
                print(len(pdf.pages))
            print(''.join(i))
            exit(0)
        except:
            pass
        s+=1
        print(100*s/total)
EN

回答 3

Code Review用户

发布于 2022-10-18 07:58:55

您的代码将永远不会实际测试任何密码,因为password不是open()的有效参数。因此,对它的每一个调用都会抛出一个TypeError,它被您的裸except子句所吞没。阅读正确的PDF库,这些库支持密码解密,并且除了语句以外,永远不要使用裸的。

票数 4
EN

Code Review用户

发布于 2022-10-17 23:15:30

用C语言重写。

值得注意的是,算法的性能可以提高,但不会增加很多,因为瓶颈肯定是一次又一次地打开文件。

编辑:这是一个奇怪的错误,请参阅@RichardNeumann的答案!

删除s的增量和打印:它在每次迭代中运行,对任何事情都没有贡献。

您可以做s2 += 1,即使s2已经被for循环增加了。这很有误导性。

编辑。感谢@SylvainD!

如果您认为每个符号只出现一次,则可以显着地减少可能性的数量。

如果这不起作用,我已经读到这个工具每秒破解PDF密码的速度是100 K。

请根据变量的实际代表来命名你的变量,即使它只是一个小脚本。我很难读到这篇文章。

票数 1
EN

Code Review用户

发布于 2022-10-18 06:58:41

代码

的回顾

有关Python代码本身的各种详细信息

您的代码看起来很好,并且正确地使用了Python的各种优秀特性:数据类型(如set )和模块(如迭代工具)。

  • m变量没有那么有用
  • s2的自动增量有点误导.以下是两个替代方案:直接使用s2+1获取product(c, repeat=s2+1)或通过在不同范围内迭代获得s2for s2 in range(1, length+1)
  • 大多数变量的名字并不表示实际意义:c是一个列表(可能是lstchars),s是一个计数器(可能是cnb),s2是一个长度。
  • 计算total的方式可能值得解释。
  • 不再使用math.factorial
  • ''.join(i)可以只计算一次,在try之前
  • r"C:\Users\User\Desktop\Document.pdf"可能在一个常数中
  • 裸的except通常被皱眉,因为它们通常比预期的捕捉到的更多,并且也没有给读者提供任何关于被捕捉到的东西的意义。有关更多详细信息,请参阅使用裸露有什么不对?except

对程序

行为的评论

如果我想使用这样的工具,下面是一些我很可能会改变的行为方面。

  • 每次迭代时调用print将花费一些时间,并且不会给用户提供太多的信息。另一种选择是打印s2:“即将尝试使用长度为X组合的密码进行测试”。
  • 停留在长度为sorted(set(c))的字符串似乎非常随意。我的建议是继续使用itertools.count而不是range
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/280535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档