Python - 蛮力生成器
Python - Brute force generator
我制作了一个可以工作的强力密码破解器,但我还制作了一个字符串组合生成器,作为强力字符串生成器会更好;但是我不知道如何将两者结合起来。
暴力破解代码:
import random
characters = "ABCDE"
length = 5
while True:
pw = ""
#Generating Section
for i in range(length):
next_index = random.randrange(len(characters))
pw = pw + characters[next_index]
if pw == "ABCDE":
print()
print()
print("Password acquired.")
break
字符生成器代码:
import itertools
res = itertools.permutations(test ,length)
for i in res:
print(''.join(i))
我想用改进的生成器代码替换暴力破解代码中的 "Generating" 部分,但我做不到。请帮忙。
我更改了您的代码以使用 itertools
并使用 generator 遍历可能的密码,这样您就不会进行超出需要的计算。
import itertools
characters = "ABCDE"
length = 5
done = False
while True:
def pw_guess():
res = itertools.permutations('ABCDE' ,5)
for guess in res:
yield guess
#Make generator object
guess_generator = pw_guess()
for guess in guess_generator:
if guess == ('A', 'B', 'C', 'D', 'E'):
print()
print("Password acquired: " + str(guess))
done = True
break
if done:
break
生成器逐个计算猜测值,而不是提前计算。
老实说,我已经制作了一个不需要那么多代码的强力程序。我的代码中的某些行是可选的(例如计算猜测密码的尝试次数。)。试试我的代码:
import random
import string
guessAttempts = 0
myPassword = input("Enter a password for the computer to try and guess: ")
passwordLength = len(myPassword)
while True:
guessAttempts = guessAttempts + 1
passwordGuess = ''.join([random.choice(string.ascii_letters + string.digits)for n in range(passwordLength)])
print(passwordGuess)
if passwordGuess == myPassword:
print("Password guessed successfully!")
print("It took the computer %s guesses to guess your password." % (guessAttempts))
break
我使用 itertools.product 从 [a-z, 0-9] 列表中生成任意长度的密码。最后一个循环中的 1800 用于我的测试。
import itertools
char_set = [chr(_) for _ in list(range(ord('a'), ord('z')+1))] + [chr(_) for _ in list(range(ord('0'), ord('9')+1))]
def my_fun(alphanum):
i = 0
while True:
result = itertools.product(alphanum, repeat=i)
for guess in result:
yield guess
i += 1
g = my_fun(char_set)
for c in range(1800):
print((''.join(next(g))))
我制作了一个可以工作的强力密码破解器,但我还制作了一个字符串组合生成器,作为强力字符串生成器会更好;但是我不知道如何将两者结合起来。
暴力破解代码:
import random
characters = "ABCDE"
length = 5
while True:
pw = ""
#Generating Section
for i in range(length):
next_index = random.randrange(len(characters))
pw = pw + characters[next_index]
if pw == "ABCDE":
print()
print()
print("Password acquired.")
break
字符生成器代码:
import itertools
res = itertools.permutations(test ,length)
for i in res:
print(''.join(i))
我想用改进的生成器代码替换暴力破解代码中的 "Generating" 部分,但我做不到。请帮忙。
我更改了您的代码以使用 itertools
并使用 generator 遍历可能的密码,这样您就不会进行超出需要的计算。
import itertools
characters = "ABCDE"
length = 5
done = False
while True:
def pw_guess():
res = itertools.permutations('ABCDE' ,5)
for guess in res:
yield guess
#Make generator object
guess_generator = pw_guess()
for guess in guess_generator:
if guess == ('A', 'B', 'C', 'D', 'E'):
print()
print("Password acquired: " + str(guess))
done = True
break
if done:
break
生成器逐个计算猜测值,而不是提前计算。
老实说,我已经制作了一个不需要那么多代码的强力程序。我的代码中的某些行是可选的(例如计算猜测密码的尝试次数。)。试试我的代码:
import random
import string
guessAttempts = 0
myPassword = input("Enter a password for the computer to try and guess: ")
passwordLength = len(myPassword)
while True:
guessAttempts = guessAttempts + 1
passwordGuess = ''.join([random.choice(string.ascii_letters + string.digits)for n in range(passwordLength)])
print(passwordGuess)
if passwordGuess == myPassword:
print("Password guessed successfully!")
print("It took the computer %s guesses to guess your password." % (guessAttempts))
break
我使用 itertools.product 从 [a-z, 0-9] 列表中生成任意长度的密码。最后一个循环中的 1800 用于我的测试。
import itertools
char_set = [chr(_) for _ in list(range(ord('a'), ord('z')+1))] + [chr(_) for _ in list(range(ord('0'), ord('9')+1))]
def my_fun(alphanum):
i = 0
while True:
result = itertools.product(alphanum, repeat=i)
for guess in result:
yield guess
i += 1
g = my_fun(char_set)
for c in range(1800):
print((''.join(next(g))))