Найти - Пользователи
Полная версия: Генератор паролей по условию.
Начало » Python для новичков » Генератор паролей по условию.
1 2
paraman
Здравствуйте все кто желает помочь.
Спасибо, что уделили моему вопросу своё время.
Есть задачка на создание всех возможных паролей. Так как недавно изучаю питон, прошу Вас более опытных помочь мне в решение этой задачке.
Условие.
Символы в словаре:
 [abcdefghijklmnopqrstuvwxyz0123456789]
Длинна пароля от 10 до 10 символов
Повторение символов:
x - повторяющейся символ.
Символы могут повторяться в таком порядке и в любом месте:
1) xxx1234567 (пример: wrgtttk8d3, 4tdc96rfff)
2) xxx1xx3xx4 (пример: 3rrrlddpww, 444kww9zzr)
3) xx12345678 (пример: d4guur5dcm, htfd4kptt0)
4) xx12345xx9 (пример: 4mme4yydpl, oo4shpp4df)
5) случайный порядок (пример: wdgolgcnhf, apl4hvbdep)
Спасибо, что тратите своё время на помощь мне.
paraman
Кто-нибудь может мне помочь?
o7412369815963
paraman
Есть задачка на создание всех возможных паролей.
Не имеет смысла.
Кол-во паролей будет, порядка 36^10, т.е. если генерировать по 100000 в сек, то выйдет более 1000 лет

По задаче, тупо перебор http://docs.python.org/2/library/itertools.html#itertools.product, и проверка 5-и условий регулярками.
Можно чуть сократить время и сделать генерацию под каждое условие.
paraman
Спасибо, хоть направление указали.
Shaman
Задача так же не имеет практического смысла.
paraman
Shaman
Задача так же не имеет практического смысла.
Согласен, но иногда ставят вот такие задачи. Которые нужно как-то решать.
paraman
Пытаюсь генерировать словарь вот таким образом, но из-за нехватки памяти процесс убивается.
Есть рецепт или заклинание какое, как это победить?

from itertools import product
for i in [''.join(item) for item in product('abcdefghijklmnopqrstuvwxyz0123456789',repeat=10)]:
    stFile = open('1.txt', 'a+')
    stFile.write(str(i+'\n'))
    stFile.close()
o7412369815963
С большими данными нужно работать через итераторы.
Делайте join в основном цикле, а формирование списка уберите.
paraman
o7412369815963
С большими данными нужно работать через итераторы.Делайте join в основном цикле, а формирование списка уберите.
Спасибо, что помогаете, а можно подробней или пример.
o7412369815963
# coding: utf8
from itertools import product
stFile = open('1.txt', 'a+')
for i, item in enumerate(product('abcdefghijklmnopqrstuvwxyz0123456789',repeat=10)):
    if not i%1000000:
        print i
        stFile.flush()
    stFile.write(str(''.join(item)+'\n'))

product - дает итератор, enumerate - дает итератор, - работа происходит с одним элементом с момента генерирования до попадания в файл, далее переходит к следующему элементу. В вашем варианте происходило формирование “бесконечного” списка "" (а для бесконечного списка нужна бесконечная память), только после его формирования пошел бы процесс записи.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB