2010-09-09 16 views
7

Generuję kod weryfikacyjny do aktywacji konta. Prawdopodobnie już wcześniej widziałeś takie rzeczy.Czy losowy ciąg to dobry kod weryfikacyjny

Moje pytanie: gdybym wygenerować ten kod ze złożonego wzoru jak poniżej:

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

to jest naprawdę lepiej niż generowanie tylko losowy ciąg 32 znaków i liczb, takich jak gj3dI3OGwo5Enf...?

+0

Można rozważyć base32 kodowania swój wynik, dzięki czemu łatwiej jest użytkownikom rozróżnić znaki, które wyglądają podobnie w niektórych czcionki. –

+0

Oprócz generowania losowej wartości (tj. Numeru weryfikacyjnego), jeśli 2 użytkowników zarejestruje się i wygeneruje dokładnie ten sam kod weryfikacyjny przez przypadek, możesz chcieć obsłużyć taki przypadek. Jeśli wyjątkowość ma znaczenie, myślę, że nawet mt_rand() może nie wystarczyć. –

+0

Uważam, że kody weryfikacyjne będą przechowywane w bazie danych - umieść unikalny klucz w kolumnie, a przed włożeniem kodu weryfikacyjnego sprawdź, czy już istnieje w bazie danych, i generuj nowe klucze, dopóki nie znajdziesz takiego, nie był wcześniej używany. –

Odpowiedz

6

Nie, używanie skrótu nie jest lepsze. Bardziej bezpieczne (mniej przewidywalne) byłoby wybieranie 32 losowych znaków. (Cyfry to znaki.) Użyj dobrego ("kryptograficznego") generatora liczb losowych, z dobrym nasieniem (kilka bajtów z/dev/random). Nie używaj czasu jako nasienia.

+2

Planowałem wygenerować 32 losowe znaki z pętlą for. Co jest nie tak z tą metodą? I nie byłoby w porządku dla zwykłej witryny do celów weryfikacji konta. (Chodzi mi o to, że nawet gdybym był twitterze czy coś takiego, nie byłoby to w porządku dla danego celu) – dave

+0

+1 całkowicie się zgadzam. – rook

+0

Tak, myślę, że wybieranie liter pojedynczo w pętli 'for' byłoby w porządku, o ile RNG jest dobre, nie będzie miało znaczenia. Byłoby to dobre dla każdej witryny (może wymagać jeszcze kilku znaków). – erickson

1

Zgadzam się z Erickson, po prostu może zalecić użyć polecenia

pwgen -1 -s 

na * nix który będzie muich zadanie lepiej od jakiejkolwiek procedury można wymyślić.

Jeśli chcesz wygenerować ciąg programowo można spojrzeć na

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

daje to bardzo dobry poziom losowości i przed kolizjami.

Jeśli potrzebujesz jeszcze wyższy poziom bezpieczeństwa można rozważyć do generowania losowych sekwencji na http://www.random.org/

Powiązane problemy