2015-10-08 1 views
1

это глупый вопрос ... если честно я действительно не имею понятия в данный момент, и я очень новичок в Python ...питона - случайная строка генератор _help_

В настоящее время я вредительство своей головы скрипт python для генерации случайного пароля. Я нашел хорошее начало от here например, «Омид» Раха

редактировать:на revist, этот пример далеко комплекса за то, что, как представляется, имеют гораздо более простые способы выполнения той же задачи ...

import random 
import hashlib 
import time 

""" 
This script is adapted from an example found here:https://stackoverflow.com/questions/18319101/whats-the-best-way-to-generate-random-strings-of-a-specific-length-in-python ; originally provided by user 'Omid Raha' 
""" 
SECRET_KEY = 'ffdsat9asdf5o5u9HKHvurtiasdf1tg1V36jyasdfSv8Ppin9O' 

    try: 
    random = random.SystemRandom() 
    using_sysrandom = True 
except NotImplementedError: 
    import warnings 
    warnings.warn('A secure pseudo-random number generator is not available ' 
        'on your system. Falling back to Mersenne Twister.') 
using_sysrandom = False 


def get_random_string(length=12, 
         allowed_chars='abcdefghijklmnopqrstuvwxyz' 
           'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
           '%*/[email protected]'): 
    """ 
    Returns a securely generated random string. 

    The default length of 12 with the a-z, A-Z, 0-9 character set returns 
    a 71-bit value. log_2((26+26+10)^12) =~ 71 bits 
    """ 
    if not using_sysrandom: 
     # This is ugly, and a hack, but it makes things better than 
     # the alternative of predictability. This re-seeds the PRNG 
     # using a value that is hard for an attacker to predict, every 
     # time a random string is required. This may change the 
     # properties of the chosen random sequence slightly, but this 
     # is better than absolute predictability. 
     random.seed(
      hashlib.sha256(
       ("%s%s%s" % (
        random.getstate(), 
        time.time(), 
        SECRET_KEY)).encode('utf-8') 
      ).digest()) 
    return ''.join(random.choice(allowed_chars) for i in range(length)) 
print (get_random_string) 

просто возвращает:

<function get_random_string at 0x1034f7848>

Я понятия не имею, что это значит ... или если я накануне n правильное выполнение скрипта.

редактировать:

спасибо, для чтения

+4

Помещенный прямо, вы печатаете определение функции, когда вы хотите вызвать функцию и вывести значение. Попробуйте 'print (get_random_string())' - круглые скобки после сигнала имени функции, который вы хотите фактически запустить функцию, и получить значение, которое оно произвело. – Monkpit

+0

@monkey спасибо :) это очень полезно для будущих начинаний – knope

ответ

0

спотыкаясь ... нашел это:

from OpenSSL import rand 

p = rand.seed("lolNOmoreBADpasswds12") 
print(p) 

что:

import os, random, string 
length = 12 
chars = string.ascii_letters + string.digits + '[email protected]#$%^&*()' 
random.seed = (os.urandom(1024)) 

print ''.join(random.choice(chars) for i in range(length)) 

и другое:

from OpenSSL import rand 

p = rand.bytes("12") 
print(p) 

играть с такими вещами, как это, то и другое сейчас ... :) редактировать:все вышеперечисленные методы сосать

Дано: xkcd rocks

позволяет рассматривать это как лучший путь вперед (для случайного генератора паролей это запоминающееся)данные y НУ есть файл, содержащий все слова строки, которые вы хотите включить:

import random, string, os 
word_file = "./wordlist" 
words = open(word_file).read().splitlines() 
part1 = random.choice(words) 
part2 = random.choice(words) 
part3 = random.choice(words) 
part4 = random.choice(words) 

phrase = part1.capitalize()+part2+part3.capitalize()+part4 
print phrase