2010-09-09 3 views
7

Je génère un code de vérification à utiliser pour l'activation du compte. Vous avez probablement déjà vu ce genre de chose auparavant.Une chaîne aléatoire est un bon code de vérification

Ma question: si je devais générer ce code avec une formule complexe comme celui-ci:

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

Est-il vraiment mieux que générer juste une chaîne aléatoire de 32 caractères et chiffres comme gj3dI3OGwo5Enf...?

+0

Vous pouvez envisager base32 l'encodage de votre résultat afin qu'il soit plus facile pour vos utilisateurs de faire la distinction entre les personnages qui ressemblent dans certains polices. –

+0

En plus de générer une valeur aléatoire (c'est-à-dire un numéro de vérification), si 2 utilisateurs s'enregistrent et génèrent le même code de vérification par accident, vous pouvez souhaiter traiter un tel cas. Si l'unicité est importante, je pense que même mt_rand() pourrait ne pas suffire. –

+0

Je pense que les codes de vérification seraient stockés dans une base de données - mettez une clé unique sur la colonne, et avant d'insérer le code de vérification, vérifiez qu'elle existe déjà dans la base de données et continuez à générer de nouvelles clés. n'a pas été utilisé précédemment. –

Répondre

6

Non, l'utilisation du hachage n'est pas meilleure. Il serait plus sûr (moins prévisible) de choisir 32 caractères aléatoires. (Les chiffres sont des caractères.) Utilisez un bon générateur de nombres aléatoires ("cryptographiques"), avec une bonne graine (quelques octets de/dev/random). Ne pas utiliser le temps comme une graine.

+2

Je prévoyais de générer les 32 caractères aléatoires avec une boucle for. Quel est le problème avec cette méthode? Et ce ne serait pas bien pour un site normal à des fins de vérification de compte. (Je veux dire, même si j'étais Twitter ou quelque chose, ce ne serait pas encore bien pour le but à portée de main) – dave

+0

+1 totalement d'accord. – rook

+0

Oui, je pense que choisir les lettres une à la fois dans une boucle 'for' serait bien, tant que le RNG est bon, cela n'aura pas d'importance. Ce serait bon pour n'importe quel site (pourrait vouloir quelques caractères de plus). – erickson

1

d'accord avec erickson, juste peut vous conseiller d'utiliser la commande

pwgen -1 -s 

sur * nix qui sera le mieux muich d'emploi de toute procédure vous pouvez inventer.

Si vous voulez générer une chaîne programme vous pouvez jeter un oeil à

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

cela donne très bon niveau de caractère aléatoire et avant les collisions.

Si vous avez besoin niveau de sécurité encore plus élevé, vous pouvez envisager de générer des séquences aléatoires sur http://www.random.org/

Questions connexes