20 Jan 2016

#miniTuto Générer des mots de passes sécures à la volée en JavaScript #1

Google+ Commentaires Newsletter

Bienvenue dans ce mini tutoriel, le tout premier d’une longue lignée je l’espère ! Pour notre numéro #1, je vais vous présenter un code JavaScript optimisé maison qui va permettre de générer aléatoirement des passwords en un clic. Cette fonction sera très pratique pour afficher par exemple un bouton « générer  » à côté d’un champ mot de passe d’un formulaire HTML…

Petit + sécurité, ces mots de passes contiendront  un caractère spécial (@#$+-*&_) situé aléatoirement dans la clé alphanumérique :

  • fchk@xTd
  • gKVad6+d
  • t95X*tq5
  • 9D2bxp4&
  • _9ubciEX

 

Partie JavaScript

La fonction generate(longueur) va générer un mot de passe à chaque fois qu’on l’appelle dans un code (exemple d’appel en dessous). Par défaut sa longueur est de 8 mais vous pouvez préciser une autre taille (generate(16)…) :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function generate(l) {
    if (typeof l==='undefined'){var l=8;}
    /* c : chaîne de caractères alphanumérique */
    var c='abcdefghijknopqrstuvwxyzACDEFGHJKLMNPQRSTUVWXYZ12345679',
    n=c.length,
    /* p : chaîne de caractères spéciaux */
    p='!@#$+-*&_',
    o=p.length,
    r='',
    n=c.length,
    /* s : determine la position du caractère spécial dans le mdp */
    s=Math.floor(Math.random() * (p.length-1));

    for(var i=0; i<l; ++i){
        if(s == i){
            /* on insère à la position donnée un caractère spécial aléatoire */
            r += p.charAt(Math.floor(Math.random() * o));
        }else{
            /* on insère un caractère alphanumérique aléatoire */
            r += c.charAt(Math.floor(Math.random() * n));
        }
    }
    return r;
}

/* exemple de fonction génération de mdp dans un form (utilise JQuery) */
$(document).ready(function() {
    /* on détecte un des champ du formulaire contient une class "gen", on insérera un bouton dans sa div parent qui appelera la fonction generate() */
    if($('form input.gen').length){
        $('form input.gen').each(function(){
            $('<span class="generate"><i class="fa fa-fw fa-refresh"></i></span>').appendTo($(this).parent());
        });
    }
   
    /* évènement click sur un element de class "generate" > appelle la fonction generate() */
    $(document).on('click','.generate', function(e){
        e.preventDefault();
        /* ajout du mot de passe + changement du paramètre type de password vers text (pour lisibilité) */
        $(this).parent().children('input').val(generate()).attr('type','text');
    });
});

Partie intégration

Le code JQuery s’occupe d’insérer un bouton de génération à côté d’un champ password. Et un event .on est créé pour détecter le clic sur ce dernier ce qui changera la valeur de votre champ password. En plus je change le type de champ de password à text afin de rendre visible le mot de passe. Optionnel : si vous avez des contraintes de sécu côté serveur à remettre ce champ en password avant l’envoi !

Voici un exemple d’intégration de ce mot de passe (CSS non compris ^^) :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
    <head>
        <script>
            function generate(l) ...
            ...
        </script>
    </head>
    <body>
        <form>
            ...
            <div>
                <label for="password">Mot de passe</label>
                <input type="text" class="gen" placeholder="Mot de passe *" required="required" name="password" id="password">
            </div>
            ...
        </form>
    </body>
</html>

 

Démo et code source

Testez vous-même le résultat (source ici) :

 

generatePassword-example

Il ne reste plus qu’à mettre votre propre style CSS est c’est dans vos projets ???? !

Continuez sur le site...

Restez informés des Actus, Tutos et Bons-Plans en suivant BXNXG :

Tags

Commentaires

  • ponzo
    12 juillet 2019 Répondre

    Bonjour,
    Merci beaucoup pour le partage de ton code, mais je n’arrive pas a l’intégrer dans mon formulaire, il doit manquer des éléments ? je suis novice dans le domaine, possible de m’aider ?

    • Péri Stuff
      13 juillet 2020 Répondre

      Bonjour moi aussi il me manquait des chose je t’envoie ce que j’ai mis et ça marche

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      91
      92
      93
      94
      95
      96
      97
      98
      99
      100
      101
      102
      103
      104
      105
      106
      107
      108
      109
      110
      111
      112
      113
      114
      115
      116
      117
      118
      119
      120
      121
      122
      123
      124
      125
      126
      127
      128
      129
      130
      131
      132
      133
      134
      135
      136
      137
      138
      139
      140
      141
      142
      143
      144
      145
      146
      147
      148
      149
      150
      151
      152
      153
      154
      155
      156
      157
      158
      159
      160
      161
      162
      163
      164
      165
      166
      167
      168
      169
      170
      <html><head>


        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>


        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">


        <script>


        function generate(l) {


          if (typeof l==='undefined'){var l=8;}


          /* c : chaîne de caractères alphanumérique */


          var c='abcdefghijknopqrstuvwxyzACDEFGHJKLMNPQRSTUVWXYZ12345679',


          n=c.length,


          /* p : chaîne de caractères spéciaux */


          p='!@#$+-*&_',


          o=p.length,


          r='',


          n=c.length,


          /* s : determine la position du caractère spécial dans le mdp */


          s=Math.floor(Math.random() * (p.length-1));




            for(var i=0; i<l; ++i){


                if(s == i){


                  /* on insère à la position donnée un caractère spécial aléatoire */


                  r += p.charAt(Math.floor(Math.random() * o));


                }else{


                  /* on insère un caractère alphanumérique aléatoire */


                  r += c.charAt(Math.floor(Math.random() * n));


                }


            }


            return r;


        }




        /* exemple de fonction generation de mdp dans un form (utilise JQuery) */


        $(document).ready(function() {


          /* on détècte un des champ du formulaire contient une class "gen", on insèrera un bouton dans sa div parent qui appelera la fonction generate() */


          if($('form input.gen').length){


            $('form input.gen').each(function(){


              $('<span class="generate" style="cursor:pointer"><i class="fa fa-fw fa-refresh"></i></span>').appendTo($(this).parent());


            });


          }


         


          /* évènement click sur un element de class "generate" > appelle la fonction generate() */


            $(document).on('click','.generate', function(e){


                e.preventDefault();


                /* ajout du mot de passe + changement du paramètre type de password vers text (pour lisibilité) */


                $(this).parent().children('input').val(generate()).attr('type','text');


          });


        });




        </script>


      </head>


      <body>


        <form>


          <h2>Générer Votre Code De Parrainage</h2>


            <div>


              <label for="password">Mot de passe</label>


              <input type="text" class="gen" placeholder="Mot de passe *" required="required" name="password" id="password">


            <span class="generate" style="cursor:pointer"></span></div>


        </form>






      </body></html>

Leave a Comment

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.