GÉNÉRER UNE CHAÎNE ALÉATOIRE SANS BOUCLE NI CRYPTAGE (MD5 OU AUTRE)

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 23 juin 2008 à 05:58
kylekatarnls Messages postés 35 Date d'inscription dimanche 4 février 2007 Statut Membre Derniè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.

https://codes-sources.commentcamarche.net/source/47089-generer-une-chaine-aleatoire-sans-boucle-ni-cryptage-md5-ou-autre

kylekatarnls Messages postés 35 Date d'inscription dimanche 4 février 2007 Statut Membre Derniè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és 496 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 29 juillet 2009 1
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és 496 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 29 juillet 2009 1
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és 35 Date d'inscription dimanche 4 février 2007 Statut Membre Derniè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.
Utilisateur anonyme
24 juin 2008 à 00:57
ça serais pas un snippet ça ?

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és 35 Date d'inscription dimanche 4 février 2007 Statut Membre Derniè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és 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
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.
Rejoignez-nous