0

我刚刚开始学习python,我正在尝试创建一个小型蛮力程序,它将要求用户输入(密码),蛮力它然后检查它是否匹配。我的问题:我被困在循环的计算中(正如您将在源代码中看到的那样)

谢谢你的帮助。

源代码:

L1=['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']

L2=['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']

L3=['0','1','2','3','4','5','6','7','8','9']

L4=L1+L2+L3

user=input("Enter your secret password here (maximum 4 characters): ")

sum=""


for i in range(0,len(L4)):

    sum=L4[i]+L4[i+1]

    print(sum)

    if sum==user:

        print("your cracked password is :", sum)

        break;
4

4 回答 4

4

你可以itertools.product在这里使用:

>>> from string import letters, digits
>>> strs = letters + digits
>>> from itertools import product
def pwd_checker(pwd):
    if 0 <len(pwd) <5:
       for i in xrange(1,5):
           for per in product(strs, repeat = i):
               if "".join(per) == pwd:
                  print 'your password is', "".join(per)
                  return
    else:
       print "Password's length must be between 1 to 4"
...             
>>> pwd_checker('a')
your password is a
>>> pwd_checker('ab12')
your password is ab12
>>> pwd_checker('foo')
your password is foo
>>> pwd_checker('Ab1c')
your password is Ab1c
>>> pwd_checker('aaaa')
your password is aaaa
>>> pwd_checker('BaBa')
your password is BaBa
于 2013-06-12T11:44:09.910 回答
3

这是所有可能密码的列表:

list(itertools.chain(
   *[map(lambda x: ''.join(x), itertools.product(L4, repeat=i)) for i in range(5)])
)

您可以遍历它或使用find(和 catch ValueError

于 2013-06-12T11:59:58.143 回答
2

假设密码只能包含 L4=L1+L2+L3 的元素,假设它具有固定长度 l。

此密码是与集合 L4 中的 l 个元素的重复组合。

然后,您的蛮力算法应该生成每个组合,并从集合 L4 中重复 1、2、3 和 4 个元素。

您可以使用 itertools 轻松完成此操作

import itertools
for l in xrange(4):
    for try_ in itertools.product(L4, repeat=l + 1):
        if ''.join(try_) == user:
            print("your cracked password is :", try_)
            return

自己实现combinations_with_replacement函数会很有趣,可以使用递归或堆栈轻松完成:)

于 2013-06-12T11:46:00.360 回答
0

我会为生产就绪代码选择 itertools 解决方案。

但是,如果您想学习和编写自己的实现代码:

经过简单的谷歌搜索,这里有一个排列算法,您可以查找并尝试用字符串而不是数字在 python 中重新实现。

于 2013-06-12T11:49:58.127 回答