2013-08-04 13 views
10

E 'stato detto che generatore di numeri casuali di Python si affida aCreazione di un numero "uncrackable" "casuale" con Python

time 

che significa che se ho voluto creare un numero casuale come questo

23987429038409238409283 

e memorizzarlo nel browser cookie per "autenticazione"

è possibile che qualcuno possa trovare questo numero in base al "tempo".

quindi la domanda è, come faccio a creare un numero casuale che non può essere indovinato da altri che conoscono molto sui codici. ?

+3

Questa è una domanda valida e semplice in pitone, con una risposta semplice che è 'random.SystemRandom', in modo da chiamare per chiudere questa via da troppo ampia è semplicemente stupido. –

+0

chiuso da hacker che non vogliono che sappiamo come fare questo? –

+0

Che stupida ragione per chiudere una domanda! Troppo ampio? C'è una risposta, e solo una. In un linguaggio dell'applicazione, utilizzare lo strumento fornito per "veramente casuale". Esiste comunque la possibilità di rimuovere le persone Karma per le domande di chiusura? –

risposta

19

Si può usare random.SystemRandom se è disponibile sul sistema:

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

classe che utilizza la funzione os.urandom() per la generazione di numeri casuali da fonti fornite dal sistema operativo. Non disponibile su tutti i sistemi. Non si basa sullo stato del software e le sequenze non sono riproducibili.

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

ritorno una stringa di byte n casuali adatti all'uso crittografica.

Questa funzione restituisce byte casuali da una sorgente di casualità specifica del sistema operativo. I dati restituiti dovrebbero essere abbastanza imprevedibili per le applicazioni crittografiche, sebbene la sua esatta qualità dipenda dall'implementazione del sistema operativo.

ad es.

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