Сгенерируйте все пароли, которые соответствуют критериям - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь создать программу, которая будет генерировать все пароли, которые содержат 2 строчные буквы, 2 цифры и 3 заглавные буквы. Я пытался сделать это изначально в Java с помощью потоков. Когда я увидел, что ничего не получилось, я решил сделать это на Python (где у меня нет никаких знаний, так как я только начал его использовать). Сначала я думал, что буду использовать itertools.combination и 3 списка, где у меня есть все цифры,прописные и строчные буквы, но у меня не хватает памяти (с 32 ГБ или ОЗУ). Затем я попытался получить список всех комбинаций для цифр, строчных и прописных букв, каждая в своей переменной. Теперь я не знаю, как бы я мог собрать это вместе.

Это то, что у меня сейчас есть

from itertools import combinations_with_replacement
from string import ascii_lowercase
from string import ascii_uppercase

digits = '1234567890'
lowLetters = ascii_lowercase
upLetters = ascii_uppercase

digitComb = combinations_with_replacement(digits, 2)
upLettersComb = combinations_with_replacement(upLetters, 2)
lowLettersComb = combinations_with_replacement(lowLetters, 3)
fullList = digitComb + upLettersComb + lowLettersComb

Я действительно понятия не имею, куда идти.

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Ну, мне удалось создать скрипт, который генерирует пароль. Кроме того, я внесу исправление, утверждая, что мне не нужно генерировать каждую возможность для каждой перестановки числа 7. Вместо этого это должно быть сделано в группах.

from itertools import product
import string

numbers = string.digits
uppercaseList = string.ascii_uppercase
lowercaseList = string.ascii_lowercase

number_prod = product(numbers, numbers)
up_prod = product(uppercaseList, uppercaseList)
low_prod = product(lowercaseList, lowercaseList, lowercaseList)

result = product(number_prod, up_prod, low_prod)

f = open("passwords.txt", "w+")
print("Please wait")
for i in result:
    f.write(''.join(str(x) for v in i for x in v) + "\n")
f.close()
print("done")


0 голосов
/ 10 октября 2019

Вы знакомы с регулярными выражениями? Если это так, вы можете сгенерировать (с некоторой библиотекой) все возможные совпадения регулярного выражения:

^(?=.{7}$)(?=[^0-9]*[0-9][^0-9]*[0-9][^0-9]*)(?=[^A-Z]*[A-Z][^A-Z]*[A-Z][^A-Z]*[A-Z][^A-Z]*)(?=[^a-z]*[a-z][^a-z]*[a-z][^a-z]*).*$

Как сказал Nico238, вашей памяти это не понравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...