python -> программа защиты паролей

я решил написать функцию грубой силы, чтобы показать людям, насколько уязвим пароль. прямо сейчас я могу показать им список, через который он проходит, чтобы найти пароль, но как я могу сказать им, сколько времени это заняло? вот код:


#!/usr/bin/python
import itertools

lower_a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
upper_a = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

alllet = []
alllet = lower_a + upper_a# + num
pwd = raw_input("What pwd?\t\t")

try:
        for r in range(1, len(pwd)+1):
                for s in itertools.product(alllet, repeat=r):
                        print ''.join(s)
                        if ''.join(s) == pwd:
                                raise NameError()

except KeyboardInterrupt:
        print "Hey! You stopped me!"

except NameError:
        print "DONE! CRACKED!"
        print "\n\nPassword is:\t" + ''.join(s) + "\n\n"



person tekknolagi    schedule 18.01.2011    source источник
comment
Кстати, from string import printable может оказаться полезным.   -  person Seth    schedule 18.01.2011
comment
Просто совет для ваших списков lower_a, upper_a и num: import string и используйте list(string.lowercase), list(string.uppercase) и list(string.digits).   -  person eumiro    schedule 18.01.2011
comment
string.printable = строка.нижний регистр + строка.верхний регистр + строка.цифры + строка.пунктуация + строка.пробел   -  person Per Fagrell    schedule 18.01.2011


Ответы (3)


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

Но если вы хотите, вы можете использовать следующее:

import time

start_time = time.time()

# Your code here

stop_time = time.time()
print "Running time in sec:", stop_time - start_time
person Elalfer    schedule 18.01.2011
comment
я приму, если вы проголосуете? или это просто не то, что мы здесь делаем - person tekknolagi; 18.01.2011
comment
Я не думаю, что это так делается. Верен ли ответ? Если это так, примите это. Если нет, то не надо. - person Andrew; 18.01.2011
comment
Вы всегда можете проголосовать, если вам нравится вопрос или ответ, и вы имеете право принять любой ответ, который вам подходит. Из часто задаваемых вопросов: Reputation is completely optional. Normal use of Stack Overflow — that is, asking and answering questions — does not require any reputation whatsoever. - person Elalfer; 18.01.2011

Вам нужен модуль timeit. Используя timeit.Timer, вы можете измерить скорость своего кода.

Вот хороший онлайн учебник.

Надеюсь это поможет

person inspectorG4dget    schedule 18.01.2011

Как долго по времени?

from time import time сверху, в начале программы делаем start = time(). в части nameerror сделайте print time() - start

пожалуйста, будьте немного более конкретным

person calccrypto    schedule 18.01.2011