【问题标题】:How to make a nested loop faster and shorter in Python如何在 Python 中使嵌套循环更快更短
【发布时间】:2020-12-08 08:46:27
【问题描述】:

我正在使用 Python 构建密码破解程序:

蟒蛇

import string

chars = string.ascii_lowercase + string.ascii_uppercase + string.digits

user_passw = input("enter pass")


for char1 in chars:
    for char2 in chars:
        for char3 in chars:
            for char4 in chars:
                for char5 in chars:
                    if (char1 + char2 + char3 + char4 + char5) == user_passw:
                        print("its " + char1 + char2 + char3 + char4 + char5)
                        exit()

我怎样才能使这个 5d 循环更快或更短。我的目标是猜测一个 12 个字符的密码,如果我进行 12d 循环,我的电脑就无法处理或者太慢了。

【问题讨论】:

  • 1) 这不是numpy 问题 2) 查找itertools.product
  • @DanielF 1) 我很抱歉我的坏 2) 我要去搜索谢谢回答
  • @DanielF 它只是更短的代码而不是更快
  • 是的,蛮力很慢。这就是为什么好的密码既长又复杂的原因。以及为什么好的密码系统会有超时和日志记录。
  • 让我们算一下:12 个字符和 62 个选项是62**12=3e21。即使您的循环花费了 1e-9 秒(1 纳秒,这将非常快),您仍然需要 100,000 年的时间来蛮力。

标签: python python-3.x passwords


【解决方案1】:

只需使用 itertools:

import itertools
import string

chars = string.ascii_lowercase + string.ascii_uppercase + string.digits

user_passw = input("Enter Your Password: ")

for password_length in range(1, 9):
    for guess in itertools.product(chars, repeat=1):
        guess = ''.join(guess)
        if guess == user_passw:                
            print('Password Is {}'.format(guess))
            exit()

第一个循环尝试暴力破解长度为 1 到 9 的密码。 第二个循环尝试来自字符的每个组合。

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2015-07-13
    相关资源
    最近更新 更多