【问题标题】:Python Password CrackerPython密码破解器
【发布时间】:2017-05-06 17:56:18
【问题描述】:

我的代码是

from random import *
guess = ""
password = input("Password: ")
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
while (guess != password):
    for letter in password:
        guessletter = letters[randint(0, 25)]
        guess = str(guessletter) + str(guess)
    print(guess)
print("Password guessed!")
input("")

我的目标是让它随机生成字母并将它们粘在一起以形成密码的长度,并这样做直到找到密码。每次我运行它时,它只会让命令提示符看起来像来自 Matrix 的东西。是不是我做错了什么?

附:我这样做是为了看看破解密码有多难。我无意侵入其他人的帐户。

【问题讨论】:

  • 您正在打印所有猜测,因为print(guess)while 循环中。如果您不想这样做,请不要打印所有猜测。
  • 但是所有的猜测都不是密码的长度,它永远也猜不出来密码,哪怕只有3个字母。
  • 我想你想在每个 while 循环开始时将你的猜测重置为空字符串
  • 您在哪里将guess 重置为空字符串?
  • @Code-Apprentice xD 感谢您的回复。我不得不说,在过去的 4 年里,我在调试方面进步了很多

标签: python for-loop while-loop


【解决方案1】:

你永远不会重置“猜测”,所以它只会越来越大。

from random import *
guess = ""
password = input("Password: ")
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
while (guess != password):
    guess = ""
    for letter in password:
        guessletter = letters[randint(0, 25)]
        guess = str(guessletter) + str(guess)
    print(guess)
print("Password guessed!")
input("")

【讨论】:

  • 不知道密码大小怎么办?
【解决方案2】:

正如已经说过的那样,您没有正确重置您的猜测。

另外,这不是您破解密码的方式,因为您一遍又一遍地重复相同的猜测。你需要以某种方式回顾所有的可能性,而不是重复自己。

假设您的密码长度为 4 个字母,您可以以 aaaa 开头,然后是 aaab,直到 zzzz。您可以按另一种顺序(随机顺序)执行此操作,但您应该只测试每个案例一次。

【讨论】:

  • 如果你对密码一无所知,我认为按字母顺序排列和随机排列一样有效!
  • 事实上两者都不是最好的。破解工具使用基于统计的方法来定义最有可能首先找到密码的顺序。
  • 如何做到这一点? (系统的方式)
【解决方案3】:

我已经稍微修改了代码以包含itertools.permutations(guess) 以获得该随机猜测的所有可能组合并针对它进行测试。这将节省一些时间。

from random import *
import itertools


guess = ""
password = input("Password: ")
letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]


while (guess != password):
    guess = ""
    perm = ""
    for letter in password:
        guessletter = letters[randint(0, 25)]
        guess = str(guessletter) + str(guess)

        perm = itertools.permutations(guess)
        
    for p in perm:                    
        guess = "".join(p)
        print(" ",guess,end="\r")
            
            
print(f"Password guessed! ==> {guess}")
input("")

【讨论】:

    猜你喜欢
    • 2016-02-01
    • 2019-07-31
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多