Petit générateur de mots de passe open source en PHP

[ 5 ] Commentaires
Share

Non, je n’ai pas passé ma matinée à rien faire.

Je me suis mis au défi de pondre un programme en PHP qui serve vraiment à quelque chose (oui parce qu’un programme qui sert à faire des additions, c’est facile à faire mais ça sert absolument à rien, ou si peu…). Ce pour me prouver que je savais coder une application en PHP.

Alors voilà, c’est fait, je suis tout fier de moi.

Le générateur se trouve à cette adresse là (je l’ai supprimé, par mesure de sécurité. Le code est disponible en dessous) et il est sous licence GPL. Et vous pouvez vérifier la source et même la critiquer.

A noter : comme je l’ai dit juste au dessus, le code est libre, donc vous pourrez vérifier que le mécanisme de génération du mot de passe n’est absolument pas issu d’une quelconque liste, mais que chaque caractère est choisi aléatoirement. Je dis cela notamment pour aux lecteurs qui auraient des doutes (légitimes) là-dessus. A priori, vous pouvez donc compter dessus. Mais je ne suis certainement pas sans faille, et donc le code que j’ai pondu non plus.

Edit : Voilà le code de ce petit script.

<?php
/*
Pondu par Louis VOLANT le Mardi 30 Juillet 2008
Licence GPL
*/
function passwdgenerator ($nb,$valeurs,$nbvaleurs)
{
//Pour la fonction, nb doit être un entier supérieur à 1. C'est le cas ici.

$resultat;

for($i=0;$i<$nb;$i++)
{
$val=$valeurs[rand(0,$nbvaleurs-1)];
$resultat=$resultat.$val;
}

return $resultat;
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Generateur de mots de passes</title>
</head>
<body>

<?php
if ($_POST['minuscules']==on||$_POST['majuscules']==on||$_POST['chiffres']==on||$_POST['caracteresspeciaux']==on&&isset($_POST['longueur']))
{


$minuscules=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
$majuscules=array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
$chiffres=array(0,1,2,3,4,5,6,7,8,9); //Pas forcément utile, je le reconnait, mais c'est plus clair.
$caracteresspeciaux=array("&gt;","&lt;",",",";",".","/",":","&amp;","|",")","(","~","#","{","}","[","]","-","=","$","*","!","?");
$longueur=$_POST['longueur'];

$touslescaracteres=array();

if($_POST['minuscules']==on) { $touslescaracteres=$touslescaracteres + $minuscules;}
if($_POST['majuscules']==on) { $touslescaracteres=array_merge($touslescaracteres,$majuscules);}
if($_POST['chiffres']==on) { $touslescaracteres=array_merge($touslescaracteres,$chiffres);}
if($_POST['caracteresspeciaux']==on) { $touslescaracteres=array_merge($touslescaracteres,$caracteresspeciaux);}

$nbcaracteres=count($touslescaracteres);

$motdepasse=passwdgenerator($longueur,$touslescaracteres,$nbcaracteres);
}
?>

<div style="text-align: center;"><big><big>G&eacute;n&eacute;rateur de mots de passe</big></big><br><br>
<div align="center">
<br />
<br />
<div style="text-align: center;"><b>
<?php
if(isset($_POST['longueur']))
{
echo 'Le mot de passe g&eacute;n&eacute;r&eacute; est : '.$motdepasse;
}
?></b></big>
<br />
<br />
<form method="post" action="passwordgenerator.php">

<table style="text-align: left; width: 100%;" border="0"
 cellpadding="2" cellspacing="2">
  <tbody>
    <tr>
      <td style="text-align: right; width: 50%; vertical-align: top;">Quels types de caract&egrave;res voulez-vous int&eacute;grer &agrave; votre mot de passe :</td>
      <td style="text-align: left; width: 50%;"> <input type="checkbox" name="minuscules" id="minuscules" checked="checked" /> <label for="minuscules">Lettres minuscules</label><br />
       <input type="checkbox" name="majuscules" id="majuscules" checked="checked" /> <label for="majuscules">Lettres majuscules</label><br />
       <input type="checkbox" name="chiffres" id="chiffres" checked="checked" /> <label for="chiffres">Chiffres</label><br />
       <input type="checkbox" name="caracteresspeciaux" id="caracteresspeciaux" checked="checked" /> <label for="caracteresspeciaux">Caract&egrave;res speciaux</label></td>
    </tr>
    <tr>
      <td style="text-align: right; width: 50%;"><label for="longueur">Combien de caract&egrave;res aura le mot de passe ?</label></td>
      <td style="text-align: left; width: 50%;"><select name="longueur" id="longueur">
           <option value="3">3</option>
           <option value="4">4</option>
           <option value="5">5</option>
           <option value="6">6</option>
           <option value="7">7</option>
           <option value="8">8</option>
           <option value="9">9</option>
           <option value="10" selected="selected">10</option>
           <option value="11">11</option>
           <option value="12">12</option>
           <option value="13">13</option>
           <option value="14">14</option>
           <option value="15">15</option>
       </select></td>
    </tr>
<tr>
      <td style="text-align: right; width: 50%;"></td>
      <td style="text-align: left; width: 50%;"><input type="submit" value="G&eacute;n&eacute;rer !" /></td>
    </tr>
  </tbody>
</table>

</form>
<br />
<br/>
<em>Pour information : il y a exactement 83 caract&egrave;res disponibles si vous
s&eacute;lectionnez toutes les options.<br>
Si vous choississez de mettre n caract&egrave;res dans votre mot de passe, il
y aura alors 83^n possibilit&eacute;s de mots de passe.<br>
Par exemple pour n = 10, cela fait en tout... 15516041187205853449
possibilit&eacute;s.
</em>
</div>

    </body>
</html>

Vous serez peut-être intéressé :

5 commentaires sur ce billet

  1. snash dit :

    J’ai essayé de télécharger le source mais ça ne fonctionne pas.
    C’est pas grave, juste un petit détail, y a t il dans le mot de passe généré au moins un caractère pour chaque type sélectionné ?

    RépondreRépondre
  2. Louis dit :

    Heu… pour moi, ça marche ! Attention : ce n’est pas un logiciel qui est à télécharger. C’est une page PHP (qui s’appelle passwordgenerator.php).

    Le ‘logiciel’ ne fonctionne que sur un serveur qui gère le PHP.

    Par contre, pour ta question : non. En fait, ce qui se passe : en fonction des caractères que tu choisis d’intégrer à ton mot de passe, le logiciel créée un ‘sac’ avec tous les caractères dedans. puis, il tire dans ce sac autant de fois que tu lui as demandé de caractères (sauf que tu peux retrouver plusieurs fois le même caractère dans ton mot de passe).

    RépondreRépondre
  3. snash dit :

    Je confirme je vois le code source sous linux mais sous windows j’ai pas eu le code.
    Oui mais alors en demandant un password complexe, on peut se retrouver avec un password simple.
    Du coup il faut faire plusieurs tirages 🙂

    Je chipote, je chipote …
    Merci pour le code. Il est vrai que je n’y touche plus.

    RépondreRépondre
  4. Louis dit :

    De rien Snash 😀 spa grave !
    Oui, en fait les fichiers textes écrits sous Linux sont quasiment illisibles sous Windows (c’est le cas ici), et l’inverse est vraie aussi.
    Cela est dû, je crois, à la gestion des retours à la ligne qui est différente : Linux et Windows ne les codent pas pareil.

    Pour en savoir plus :
    là : http://www.generation-nt.com/reponses/retour-a-la-ligne-windows-linux-entraide-227617.html
    et là : http://fr.wikipedia.org/wiki/CRLF

    RépondreRépondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *