2013-08-04 7 views
10

Został on powiedział, że generator liczb losowych Pythona polega naTworzenie „uncrackable” „losowy” numer z Pythonem

time 

co oznacza, gdybym chciał stworzyć liczbę losową jak ten

23987429038409238409283 

i zapisać w ciasteczkach przeglądarki w celu "uwierzytelnienia"

jest możliwe, że ktoś może znaleźć tę liczbę na podstawie "czasu".

, więc pytanie brzmi: jak utworzyć losową liczbę, której nie mogą odgadnąć inni, którzy znają się na kodach. ?

+3

To jest poprawne i proste pytanie na python, z prostą odpowiedzią, która jest "random.SystemRandom", więc wywołanie, aby zamknąć to przez zbyt szerokie jest po prostu głupie. –

+0

zamknięte przez hakerów, którzy nie chcą, abyśmy wiedzieli, jak to zrobić? –

+0

Co za głupi powód, aby zamknąć pytanie! Zbyt szeroki? Jest jedna i tylko jedna odpowiedź. W języku aplikacji użyj narzędzia dostarczonego dla "prawdziwie losowego". Czy mimo to należy usunąć ludzi Karmy, aby uzyskać pytania zamykające? –

Odpowiedz

19

Można użyć random.SystemRandom jeśli jest ona dostępna w systemie:

http://docs.python.org/2/library/random.html#random.SystemRandom

Klasa że wykorzystuje funkcję os.urandom() do generowania liczb losowych ze źródeł dostarczonych przez system operacyjny. Niedostępne we wszystkich systemach. Nie polega na stanie oprogramowania, a sekwencje nie są odtwarzalne.

http://docs.python.org/2/library/os.html#os.urandom

powrotu ciąg n losowych bajtów odpowiednich do stosowania kryptograficznego.

Ta funkcja zwraca losowe bajty ze źródła losowości związanego z OS. Zwrócone dane powinny być wystarczająco nieprzewidywalne dla aplikacji kryptograficznych, chociaż ich dokładna jakość zależy od implementacji systemu operacyjnego.

np.

>>> import sys 
>>> import random 
>>> rng = random.SystemRandom() 
>>> rng.random() 
0.7195432667967437 
>>> rng.randint(0, sys.maxint) 
3614556690529452993