2010-09-09 9 views
7

Sto generando un codice di verifica da utilizzare per l'attivazione dell'account. Probabilmente hai già visto questo genere di cose prima.È una stringa casuale un buon codice di verifica

La mia domanda: se dovessi generare questo codice con una formula complessa come questa:

md5(md5(time().'helloguys'.rand(0,9999))); 

E 'davvero meglio di generare solo una stringa casuale di 32 caratteri e numeri come gj3dI3OGwo5Enf...?

+0

Si potrebbe prendere in considerazione Base32 codifica del risultato in modo che sia più facile per gli utenti di distinguere tra personaggi che sembrano simili in qualche font. –

+0

Oltre a generare un valore casuale (ovvero il numero di verifica), se 2 utenti si registrano e generano lo stesso codice di verifica per errore, è possibile che si desideri gestire tale caso. Se l'unicità conta, penso che neanche mt_rand() potrebbe non essere sufficiente. –

+0

Penso che i codici di verifica verrebbero archiviati in un database: inserire una chiave univoca nella colonna e prima di inserire il codice di verifica, verificare se esiste già nel database e continuare a generare nuove chiavi finché non ne trovi una che non è mai stato usato in precedenza –

risposta

6

No, l'utilizzo dell'hash non è migliore. Sarebbe più sicuro (meno prevedibile) scegliere 32 caratteri casuali. (Le cifre sono caratteri.) Usare un buon generatore di numeri casuali ("crittografici"), con un buon seme (alcuni byte da/dev/random). Non usare il tempo come seme.

+2

Avevo intenzione di generare i 32 caratteri casuali con un ciclo for. Cosa c'è di sbagliato con questo metodo? E non andrebbe bene per un sito normale ai fini della verifica dell'account. (Voglio dire, anche se fossi twitter o qualcosa del genere, non sarebbe bello per lo scopo attuale) – dave

+0

+1 totalmente d'accordo. – rook

+0

Sì, penso che scegliere le lettere una alla volta in un ciclo 'for' sia corretto, a patto che l'RNG sia valido non importa. Questo andrebbe bene per qualsiasi sito (potrebbe volere qualche altro carattere). – erickson

1

d'accordo con Erickson, solo può consigliare di utilizzare

pwgen -1 -s 

comando in * nix, che sarà la muich lavoro migliore di qualsiasi procedura che si può inventare.

Se si desidera generare una stringa di codice si può dare un'occhiata a

<?php  
$better_token = md5(uniqid(rand(),1)); 
?> 

questo dà ottimo livello di casualità e prima di collisioni.

Se avete bisogno di ancora più elevato livello di sicurezza che si può prendere in considerazione per generare sequenze casuali su http://www.random.org/