PHP – Générateur de mot de passe paramétrable
Sommaire
I. Présentation
Trouver des mots de passe complexes pour ses utilisateurs n'est pas toujours simple mais c'est sans compter sur l'utilisation d'un script PHP qui peut nous en générer des complexes, rapidement et en grande quantité.
Nous allons donc voir comment créer ce script, que vous pourrez paramétrer selon ce que vous souhaitez obtenir en remplissant seulement un formulaire.
II. Que permet-il de paramétrer ?
- Le nombre de caractères que le mot de passe doit contenir.
- Le nombre de mot de passe à générer.
- Le type de caractères que doit contenir le mot de passe.
III. Quel est le rôle de chaque page ?
Il y a une page qui contient uniquement le formulaire où l'utilisateur doit indiquer ce qu'il souhaite obtenir, cette page envoie ensuite les paramètres à une autre page qui génére les mots de passe. Le nom de cette première page est ParamPasswd.php.
La seconde page génére et affiche l'intégralité des mots de passe selon les paramètres reçus de la page ParamPasswd.php. Cette seconde page s'appelle ListPasswd.php.
IV. Le formulaire - Page ParamPasswd.php
Créez une nouvelle page, enregistrez la au format php avec le nom indiqué ci-dessus et insérez le formulaire suivant :
<form action='ListPasswd.php'> Nombre de mot de passe a générer : <input type='text' Name='nbrPasswd' value='1'> <br> Taille du/des mot(s) de passe (Nombre de caractères) : <input type='text' Name='nbrCaract' value='5'> <br> Type de mot de passe : <select name='typePasswd'> <option value='1'>Chiffres uniquement</option> <option value='2'>Lettres uniquement</option> <option value='3'>Chiffres et lettres</option> <option value='4'>Tout caractères</option> </select> <br> <input type='submit' value='Générer'> </form>
V. La génération et le listage des mots de passe - ListPasswd.php
Comme pour l'autre page, créez un nouveau document au format PHP puis donnez lui comme nom ListPasswd.php. Insérez le code suivant :
<?php // Récupère les paramètres pour adapter selon les besoins de l'utilisateur $SaisieNbrPasswd = $_GET['nbrPasswd'] ; $SaisieNbrCaract = $_GET['nbrCaract'] ; $SaisieTypePasswd = $_GET['typePasswd'] ; // Type de caractères à prendre en compte pour générer les mots de passe (change selon paramètre utilisateur) : if ($SaisieTypePasswd == '1') { $caract = "0123456789"; } else if ($SaisieTypePasswd == '2') { $caract = "abcdefghijklmnopqrstuvwyxz"; } else if ($SaisieTypePasswd == '3') { $caract = "abcdefghijklmnopqrstuvwyxz0123456789"; } else if ($SaisieTypePasswd == '4') { $caract = "abcdefghijklmnopqrstuvwyxz0123456789@!:;,§/?*µ$=+"; } // Nombre de caractères que le mot de passe doit contenir (= saisie utilisateur) : $nb_caract = $SaisieNbrCaract; // On fait un première boucle pour générer des mots de passe jusqu'au nombre indiqué par l'utilisateur // Puis une seconde boucle pour générer le mot de passe caractère par caractère jusqu'au nombre indiqué par l'utilisateur for($nbrPasswd = 1; $nbrPasswd <= $SaisieNbrPasswd; $nbrPasswd++) { for($i = 1; $i <= $nb_caract; $i++) { // On compte le nombre de caractères $Nbr = strlen($caract); // On choisit un caractère au hasard dans la chaine sélectionnée : $Nbr = mt_rand(0,($Nbr-1)); // Pour finir, on écrit le résultat : print $caract[$Nbr]; } echo "<br>"; } ?>
VI. Exemple
On saisit nos paramètres... puis on clic sur Générer
La liste des mots de passe s'affiche :
Vous pouvez modifier ce script comme vous le souhaitez, notamment au niveau des chaînes de caractères si vous souhaitez exclure ou ajouter des caractères, vous pouvez aussi regrouper tout dans une même page mais il y aura quelques modifications à apporter au code. En ce qui concerne la mise en page, libre à vous de juger si c'est nécessaire...
Super !
Marche pas si on est en mode POST et si on ajoute d’autre éléments au formulaire, donc code inutile en plus d’être non safe à cause du _GET obligatoire -_-
Bonjour,
Il n’y a pas de raison que cela ne fonctionne pas en POST si le code est bien adapté. Le but de tutoriel n’était pas de proposer un code sécurisé mais uniquement de proposer une solution pour générer des mots de passe simplement. Libre à vous de sécuriser le code… Plutôt que de dire que mon code est inutile, j’aurais préféré que vous donnez quelques conseils pour le sécuriser.
Bonne journée.
Florian
mécontent ton commentaire ne sert à rien respecte un peu son travail. Par contre tu pourrais stocker les variables du nombre de mdp, de sa taille et de son type en variable de sessions comme ça lorsqu’on génère on est pas obligé de remettre les paramètre que l’on cherche. Sinon très cool ton générateur 😉
C’est vrai que j’aurais plus passer par des variables de sessions, le but étant surtout de proposer un générateur de mot de passe simple et efficace, avant tout fonctionnel.
Merci en tout cas pour ta réponse constructive, il y a beaucoup d’améliorations possibles à partir de la base fournie 😉
Bonjour,
Un problème persiste et je n’arrive pas à trouver la solution.
Lors de l’affichage des mots de passe, voici le résultat « ‘; } ?> » -> disparait lors de la suppresion du dernier echo.
De plus, si j’effectue un echo ‘Test’ ; en première ligne, l’echo ne s’affiche pas.
J’ai étudié le code mais je n’arrive pas à trouver la coquille.
Merci de votre aide,
Rémi
Erreur de ma part
Super ton Code, il me seras utile pour proposer des mots de passe à mes utilisateurs 🙂
Merki! 🙂
Bonjour
Je déterre un vieux post mais voici le code en une page pour ceux qui veulent :
http://cloud.compu-tek.fr/index.php/s/fdbqQO4N1Ryhphb
Merci pour le code source 🙂
Bonjour Rémi qu’avez vous fait pour retirer cette erreur « ‘; } ?> »?? svp
C’est moi ou le 6ième mdp ne correspond pas aux critères.
Très bonne base qui ma inspiré
http://my-password.net
Bonjour comment récuperer valeur du code dans une variable??
lorsque je mets :
print $caract[$Nbr];
sans le print je ne recois qu’un caractère.
je veux faire un truc pareil: $code= $caract[$Nbr]; pour recuperer le code generer complet et enregistrer en Base de données
il te suffit de mettre dans le value de ton input le script complet et de faire un print en fin…
style : j’ai perso mis juste 1 mot de passe avec 10 caracteres et le type 3
<input name="mdp" type="hidden" value="<?php
$SaisieNbrPasswd = 1;
$SaisieNbrCaract = 10;
$SaisieTypePasswd = 3;
if ($SaisieTypePasswd){ $caract = "abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@§?*µ$=+"; }
$nb_caract = $SaisieNbrCaract;
for($nbrPasswd = 1; $nbrPasswd <= $SaisieNbrPasswd; $nbrPasswd++) {
for($i = 1; $i » />