kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 2 janv. 2010 à 09:34
Re,
Tu as nommé ta source "GÉNÉRER UN MOT DE PASS ALÉATOIRE", ne l'oublie pas :)
On peut donc considérer qu'une chaîne entre 8 et 15 caractères est satisfaisante. Inutile d'en générer plus.
MD5 retourne 32 car.
Bref, comme dit plus haut tu sors la "grosse artillerie" pour un truc qui se fait en 1 seule ligne, et qui est bien plus optimisé.
Maintenant, si tu souhaites rester sur ce principe, il pourrait être intéressant de le justifier. Par exemple en tentant de générer des mots de passe facile à retenir pour un humain, que tu complexifierais par l'ajout de caractères spéciaux et de ponctuation, par exemple :
trau20,abraz
?aimy1_@rinette
afer,130vint
...
Dans ce cas l'utilisation d'une fonction serait requise, en travaillant sur une alternance de voyelles / consonnes / car spéciaux.
Cordialement,
Kohntark-
narkos2
Messages postés10Date d'inscriptiondimanche 16 novembre 2008StatutMembreDernière intervention 2 septembre 2010 2 janv. 2010 à 00:03
Salut Kohntark-,
Merci pour ta solution et ton explication. C'est vrai que t'as solution à l'air moins lourde.
Par contre par curiosité tu peux avoir maximum combien de caractères pour le mdp? car avec le md5 la taille se limite un peu je pense...
Sinon merci pour la faute dans mon code ;) je vais actualiser la source.
Salutations
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 1 janv. 2010 à 23:22
Salut,
J'enfonce le clou sur la simplicité :)
Ta fonction est particulièrement lourde pour générer une simple chaîne aléatoire (boucle, tableaux, ...)
Un truc comme ça est tout de même mieux tu ne penses pas ?
en plus c'est au moins 6 fois plus rapide (bon, OK, c'est ultra négligeable sur quelques itérations)
En passant, tu as une erreur dans ton code :
mt_rand(0,count($caracteres))
=>
mt_rand(0,count($caracteres)-1)
Cordialement,
Kohntark-
narkos2
Messages postés10Date d'inscriptiondimanche 16 novembre 2008StatutMembreDernière intervention 2 septembre 2010 1 janv. 2010 à 21:34
Ouai j'ai compris qu'il y a plus simple, et bien sure qu'en ajoutant les caractères en plus de 0 à 9 et les minuscules le test sera plus juste, mais ça ne change rien au fait que ta soluce ne donne pas la possibilité d'avoir des caractères répétés plusieurs fois dans le mdp final, à moins de les écrire plusieurs fois dans ta chaîne...
Enfin bon là c'est un peu une question de gout ;) et de façon de faire.
Comme ça les gens auront plus de choix ;)
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 1 janv. 2010 à 20:38
Salut,
Bonne année à toi aussi ;)
Je passe en coup de vent...Ton test ne signifie pas grand chose en l'état! Il aurait fallut que tu mettes les autres caractères minuscules et chiffres en supplément. Moi, je n'ai pas mis car sa faisait long à taper, mais il m'a sembler évident qu'il fallait les insérer.
Après, ce que je t'ai dit c'est qu'il y a plus simple pour générer des mdp que des tableaux et un mt_rand() :
narkos2
Messages postés10Date d'inscriptiondimanche 16 novembre 2008StatutMembreDernière intervention 2 septembre 2010 1 janv. 2010 à 16:01
Salut,
Déjà merci pour tes commentaires ;)
Ensuite bonne année!
Pour le code que tu proposes dans tes messages, j'ai testé le code en demandant un mot de pass de 15 caractères puis un de 30 pour pousser un peu le test ;)
Le résultat avec une demande de mdp de 15 caractères:
mon script: P5ArXfXqOSyuVuH
ta solution: EBPIRSLUFCDVNOG
Le résultat avec une demande de mdp de 30 caractères:
mon script: vld3vHZqwEuKW75lxYmfsO8iFPppvX
ta solution: VYSGMPHNWKCURJDXIOAEFZQBLT (retourne seulement 26 caractères, mais on rajoute 0-9 et ça passe ;) )
Voilà mon script s'en sort bien ;)
Mais merci pour ta solution.
Par contre je vais remodifier mon array de caractères, car j'avais mis à chaque fois la clé puis la valeur, pour utiliser le chiffre de la dernière valeur de l'array comme 2ème paramètre de mt_rand(), mais je vais donc enlever les clé pour racourcir le code car elle seront créé automatiquement, et je vais remplacerais le 61 "en dur" par un count sur l'array, comme ça si on veut rajouter des type de caractère pour générer le mot de passe il y aura pas besoin de retoucher le mt_rand()...
Ensuite je vais rajouter une vérif sur la valeur envoyée à la fonction, car si on fait PassGen("lol"); ben ça sot pas quelque chose de bon ;)
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 31 déc. 2009 à 16:07
Dans le strlen() c'est $nbr_caractere et non $caractères
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 31 déc. 2009 à 15:49
2 janv. 2010 à 09:34
Tu as nommé ta source "GÉNÉRER UN MOT DE PASS ALÉATOIRE", ne l'oublie pas :)
On peut donc considérer qu'une chaîne entre 8 et 15 caractères est satisfaisante. Inutile d'en générer plus.
MD5 retourne 32 car.
Bref, comme dit plus haut tu sors la "grosse artillerie" pour un truc qui se fait en 1 seule ligne, et qui est bien plus optimisé.
Maintenant, si tu souhaites rester sur ce principe, il pourrait être intéressant de le justifier. Par exemple en tentant de générer des mots de passe facile à retenir pour un humain, que tu complexifierais par l'ajout de caractères spéciaux et de ponctuation, par exemple :
trau20,abraz
?aimy1_@rinette
afer,130vint
...
Dans ce cas l'utilisation d'une fonction serait requise, en travaillant sur une alternance de voyelles / consonnes / car spéciaux.
Cordialement,
Kohntark-
2 janv. 2010 à 00:03
Merci pour ta solution et ton explication. C'est vrai que t'as solution à l'air moins lourde.
Par contre par curiosité tu peux avoir maximum combien de caractères pour le mdp? car avec le md5 la taille se limite un peu je pense...
Sinon merci pour la faute dans mon code ;) je vais actualiser la source.
Salutations
1 janv. 2010 à 23:22
J'enfonce le clou sur la simplicité :)
Ta fonction est particulièrement lourde pour générer une simple chaîne aléatoire (boucle, tableaux, ...)
Un truc comme ça est tout de même mieux tu ne penses pas ?
$passLen = 12;
$pass = substr(md5(uniqid(mt_rand(), true)), 0, $passLen);
en plus c'est au moins 6 fois plus rapide (bon, OK, c'est ultra négligeable sur quelques itérations)
En passant, tu as une erreur dans ton code :
mt_rand(0,count($caracteres))
=>
mt_rand(0,count($caracteres)-1)
Cordialement,
Kohntark-
1 janv. 2010 à 21:34
Enfin bon là c'est un peu une question de gout ;) et de façon de faire.
Comme ça les gens auront plus de choix ;)
1 janv. 2010 à 20:38
Bonne année à toi aussi ;)
Je passe en coup de vent...Ton test ne signifie pas grand chose en l'état! Il aurait fallut que tu mettes les autres caractères minuscules et chiffres en supplément. Moi, je n'ai pas mis car sa faisait long à taper, mais il m'a sembler évident qu'il fallait les insérer.
Après, ce que je t'ai dit c'est qu'il y a plus simple pour générer des mdp que des tableaux et un mt_rand() :
1 janv. 2010 à 16:01
Déjà merci pour tes commentaires ;)
Ensuite bonne année!
Pour le code que tu proposes dans tes messages, j'ai testé le code en demandant un mot de pass de 15 caractères puis un de 30 pour pousser un peu le test ;)
Le résultat avec une demande de mdp de 15 caractères:
mon script: P5ArXfXqOSyuVuH
ta solution: EBPIRSLUFCDVNOG
Le résultat avec une demande de mdp de 30 caractères:
mon script: vld3vHZqwEuKW75lxYmfsO8iFPppvX
ta solution: VYSGMPHNWKCURJDXIOAEFZQBLT (retourne seulement 26 caractères, mais on rajoute 0-9 et ça passe ;) )
Voilà mon script s'en sort bien ;)
Mais merci pour ta solution.
Par contre je vais remodifier mon array de caractères, car j'avais mis à chaque fois la clé puis la valeur, pour utiliser le chiffre de la dernière valeur de l'array comme 2ème paramètre de mt_rand(), mais je vais donc enlever les clé pour racourcir le code car elle seront créé automatiquement, et je vais remplacerais le 61 "en dur" par un count sur l'array, comme ça si on veut rajouter des type de caractère pour générer le mot de passe il y aura pas besoin de retoucher le mt_rand()...
Ensuite je vais rajouter une vérif sur la valeur envoyée à la fonction, car si on fait PassGen("lol"); ben ça sot pas quelque chose de bon ;)
31 déc. 2009 à 16:07
31 déc. 2009 à 15:49
$caracteres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for($i=0; $i<strlen($caracteres); $i++)
{
$generate = $str_shuffle($caracteres);
}
$mdp = substr($generate,0,5);
31 déc. 2009 à 15:45
Il y a plus simple:
$generate = $str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
$mdp = substr($generate,0,5);
;)