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

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.