我如何使用字母表创建一个蛮力方法

How can I create a brute-force method using the alphabet

我想创建一个使用字母表的暴力破解方法。

例如:

x = input("What is your password ?")
length = len(x)

然后程序将按字母顺序检查每个组合,如:

aa、ab、ac、ad 等等。

我试过一种方法:

for c in printable:
    r = c
    status = r
    for c in printable:
        r = (f"{status}{c}")

并且此方法在第 3 个循环中中断。

我有办法做到这一点吗?

您可以使用 python 的 itertools 模块。

import itertools
import string

length = N

for combinaison in itertools.product(string.ascii_lowercase, repeat=length):
    print(''.join(combinaison ))

可能是这样的(假设密码长度未知):

from itertools import permutations

password = input()

for i in range(1, len(password) + 1):
    for p in permutations(password, i):
        print(p)

对于像 'abc' 这样的输入,输出将是:

('a',)
('b',)
('c',)
('a', 'b')
('a', 'c')
('b', 'a')
('b', 'c')
('c', 'a')
('c', 'b')
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

如果你想自己做 - 这是方法。

如果您有字母表,例如['a', 'b', 'c', 'd', 'e'],它有 N 个不同的字符,您可以尝试解释以 N 为底数的数字。例如对于大小为 5 的字母表,可以将 112 解释为 422 (4*5^2 + 2*5^1 + 2*5^0)。然后使用这个 422 表示,你索引字母表 4 是字母 'e',2 是字母 'c'。因此,您将十进制数 112 解释为密码 'ecc'。最后,为了 burteforce,你尝试从 1 到大的每个十进制数,然后按照我的描述解释每个。

alphabet = ['a', 'b', 'c', 'd', 'e']
max_length = 5
max_bruteforce = len(alphabet)**max_length

for attempt in range(max_bruteforce):
    password = ''
    while attempt > 0:
        letter_i = int(attempt % len(alphabet))
        letter = alphabet[letter_i]
        password = letter + password
        attempt = attempt // len(alphabet)
    print(password)