我如何使用字母表创建一个蛮力方法
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)
我想创建一个使用字母表的暴力破解方法。
例如:
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)