GÉNÉRER UNE CHAÎNE ALÉATOIRE SANS BOUCLE NI CRYPTAGE (MD5 OU AUTRE)
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
23 juin 2008 à 05:58
kylekatarnls
Messages postés35Date d'inscriptiondimanche 4 février 2007StatutMembreDernière intervention 1 juillet 2008
-
1 juil. 2008 à 16:59
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
kylekatarnls
Messages postés35Date d'inscriptiondimanche 4 février 2007StatutMembreDernière intervention 1 juillet 2008 1 juil. 2008 à 16:59
Merci GillesWebmaster pour ton encouragement et je tiens à le rappeler, c'est bien une chaîne aléatoire et non une clé unique.
GillesWebmaster
Messages postés496Date d'inscriptionmercredi 30 juin 2004StatutMembreDernière intervention29 juillet 20091 30 juin 2008 à 11:05
Mais bon l'idée est bonne même si la chaine ne sera jamais (théoriquement) unique; savoir sortir des chemins battus est parfois une bonne idée; encourageons cela, nous autres programmeurs bornées ;-)
GillesWebmaster
Messages postés496Date d'inscriptionmercredi 30 juin 2004StatutMembreDernière intervention29 juillet 20091 30 juin 2008 à 11:03
Tout ça reste théorique car vous oubliez encore l'analyse combinatoire de la fonction str_shuffle()!
kylekatarnls
Messages postés35Date d'inscriptiondimanche 4 février 2007StatutMembreDernière intervention 1 juillet 2008 24 juin 2008 à 11:09
La multiplication de l'alphabet par la longueur sert à obtenir l'équiprobabilité de chaque caractère. Ce n'est pas tout à fait exact mais au moins une lettre peut se trouver en double dans le code (ce qui fait 26 puissance 8 possibilité) alors que si on prend un seul alphabet, les lettres n'apparaissent qu'une seule fois (et on a 26! possibilité) ce qu'estimait COUCOU747 qui n'a pas du voir le str_repeat. Après c'est à l'utilisateur de juger où est son intérêt, pour la constante en effet, c'est le genre d'habitude que j'ai du mal à prendre.
L'astuce semble sympa - quelques corrections ligne 3 : str_repeat et non str_reapeat. Il faudrait que t'expliques ton code ligne par ligne / voire fonction par fonction.
Tu définit un dico / puis une longeur.
1ére remarque :
le dico pourrais être dans une constante et la longeur un paramètre de fonction. Ca donnerais ça :
define('DICO', 'azertyuiopqsdfghjklmwxcvbn');
function genRandChar($length = 8) {
return substr(str_shuffle(str_repeat(DICO,$length)),0,$length);
}
Tu fait un str-repeat donc tu dupliques dans une chaine ton dico N fois. Ensuite tu lui demandes de mélanger l'ensemble de la chaîne str-shuffle. Puis tu prends depuis le début jusqu'à la longeur demandée.
A mon avis c'est pas bon - t'as 20 lettres dans le dico (je simplifie), tu veux un mot de passe de 8 lettres et tu lui demandes de mélanger 160 lettres (8 * 20) pour n'en retourner que les 8 premières. Pas bon au niveau perfs - fais un tour sur les commentaires de cette page :
http://fr2.php.net/manual/fr/function.str-shuffle.php
kylekatarnls
Messages postés35Date d'inscriptiondimanche 4 février 2007StatutMembreDernière intervention 1 juillet 2008 23 juin 2008 à 15:46
Oui, ce genre de système convient plutôt à une image anti-bot ou ce genre de choses. C'est pour ça que le titre est "générer une chaîne" et pas "générer une clé".
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 23 juin 2008 à 05:58
salut
pour une chaine de n caracteres, t'as n! possibilites, ce qui est enorme, mais t'as aucune garentie de l'aleatoire de la fonction str_shuffle, contrairement aux fonctions genre unique_id ou : md5(microtime()) qui semble _beaucoup_ plus fiables, meme si leur resultat est moins joli.
1 juil. 2008 à 16:59
30 juin 2008 à 11:05
30 juin 2008 à 11:03
24 juin 2008 à 11:09
24 juin 2008 à 00:57
L'astuce semble sympa - quelques corrections ligne 3 : str_repeat et non str_reapeat. Il faudrait que t'expliques ton code ligne par ligne / voire fonction par fonction.
Tu définit un dico / puis une longeur.
1ére remarque :
le dico pourrais être dans une constante et la longeur un paramètre de fonction. Ca donnerais ça :
define('DICO', 'azertyuiopqsdfghjklmwxcvbn');
function genRandChar($length = 8) {
return substr(str_shuffle(str_repeat(DICO,$length)),0,$length);
}
Tu fait un str-repeat donc tu dupliques dans une chaine ton dico N fois. Ensuite tu lui demandes de mélanger l'ensemble de la chaîne str-shuffle. Puis tu prends depuis le début jusqu'à la longeur demandée.
A mon avis c'est pas bon - t'as 20 lettres dans le dico (je simplifie), tu veux un mot de passe de 8 lettres et tu lui demandes de mélanger 160 lettres (8 * 20) pour n'en retourner que les 8 premières. Pas bon au niveau perfs - fais un tour sur les commentaires de cette page :
http://fr2.php.net/manual/fr/function.str-shuffle.php
23 juin 2008 à 15:46
23 juin 2008 à 05:58
pour une chaine de n caracteres, t'as n! possibilites, ce qui est enorme, mais t'as aucune garentie de l'aleatoire de la fonction str_shuffle, contrairement aux fonctions genre unique_id ou : md5(microtime()) qui semble _beaucoup_ plus fiables, meme si leur resultat est moins joli.