Un générateur de mots de passe en javascript

Dans l’optique de continuer mon auto-formation au Javascript, et par la même de diminuer mon sentiment d’ignorance face à ce langage, j’ai entrepris de réaliser un générateur de mots de passe en version Javascript. Ne nous méprenons pas : rien à voir avec celui que j’avais déjà fait en PHP, car le principe de celui-ci est que tout est créé en local, et donc en somme, aucun mot de passe généré ne passe à travers le réseau. Je suis sûr que cette précision en rassurera quelques uns 🙂


Comment ce générateur fonctionne ?

De la même façon que le générateur PHP, ce générateur en Javascript génère en fonction de ce qui a été choisit pour créer le mot de passe : longueur et choix des différents caractères, les minuscules étant obligatoirement intégrées.

Ensuite, et sur le modèle du code trouvé sur Blazonry, j’ai adopté l’idée de calquer le chiffre généré aléatoirement sur les codes de données/valeur de l’Ascii. Sur Blazonry, seul l’inclusion de caractères spéciaux ou non est gérée, mais j’ai préféré découper cela dans les différents types de caractères.

En terme de performances, ce qui est pas mal, c’est que tout se passe sur l’ordinateur du client, donc celui-ci n’a plus besoin du serveur une fois qu’il a téléchargé la page web et son fichier javascript associé. Donc pas de problème si l’utilisateur veut regénérer 15 fois un nouveau password (si celui-ci ne lui plait pas). Et cela implique moins de coût de processeur/bande passante a priori (même si en terme de bande passante, le coût est supérieur pour un seul téléchargement vu qu’il faut compter le coût associé au fichier JS. Je pense que le point d’égalité en terme de coût est situé pour 2 mots de passes générés). Bon, évidemment, en fait tout cela est négligeable, je doute que beaucoup de monde ait des problèmes de bande passante pour envoyer un pauvre fichier Javascript, mais disons que j’aurais pu être critiqué si je ne l’avais pas précisé.

Ce générateur est mis sur le domaine AbriCoCotier Application.

Ci-dessous, le code du fichier JS :

function GeneratePassword() {
 
    if (parseInt(navigator.appVersion) <= 3) {
        alert("Sorry this only works in 4.0+ browsers");
        return true;
    }
 
    var length=12;
    var sPassword = "";
    length = document.aForm.charLen.options[document.aForm.charLen.selectedIndex].value;
    
    var lowercase = 1;
    var uppercase = (document.aForm.uppercase.checked);
    var figures = (document.aForm.figures.checked);
    var punction = (document.aForm.punctuation.checked);            
 
    for (i=1; i <= length; i++) {
 
        numI = getRandomNum();
        if ((punction == 0 && checkPunc(numI)) || (figures == 0 && checkFigures(numI)) ||(uppercase == 0 && checkUppercase(numI))) {i -= 1;}
        else {sPassword = sPassword + String.fromCharCode(numI);}
    }
 
    document.aForm.passField.value = sPassword
 
    return true;
}
 
function getRandomNum() {
    // between 0 - 1
    var rndNum = Math.random()
    // rndNum from 0 - 1000
    rndNum = parseInt(rndNum * 1000);
    // rndNum from 33 - 127
    rndNum = (rndNum % 94) + 33;
    return rndNum;
}
 
function checkPunc(num) {
    if (((num >=33) && (num <=47)) || ((num >=58) && (num <=64))) { return true; }
    if (((num >=91) && (num <=96)) || ((num >=123) && (num <=126))) { return true; }
    return false;
}

function checkFigures(num) {
    if ((num >=48) && (num <=57)) { return true; }
    else { return false; }
}

function checkUppercase(num) {
    if ((num >=65) && (num <=90)) { return true; }
    else { return false; }
}

11 réflexions sur « Un générateur de mots de passe en javascript »

  1. Tu devrais agrandir légèrement la case où le mot de passe apparaît car quand on passe à 18 caractères, le dernier ne s’affiche pas toujours 😉

    De plus, tu devrait ajouter ce bout de code pour la case : onfocus= »this.select() » onmouseover= »this.focus() »
    Grâce à celui-ci, quand tu passeras la souris sur la case, le mot de passe sera sélectionné et donc juste un ctrl + c pour le copier/coller suffira 🙂

  2. @PSP: Merci pour ta réponse 🙂

    J’ai regardé, et en fait comme y’avais déjà le onClick, le onfocus+onmouseover amènent un conflit. Pour ma part, je suis plus habitué à cliquer dans le champs. En tout cas, j’ai rajouté onmouseover= »this.select() », et je verrai si j’ai d’autres retours. Merci encore 🙂

  3. @rangzen: Ah oui c’est pas mal 🙂 Si tu regarde, c’est en fait du code javascript intégré à un marque page, donc plutôt que de télécharger une page avec un code JS, tu l’intègres directement à ton navigateur.

  4. Il est important de préciser que le risque est plus grand de se faire pirater un mot de passe sur un site web ayant une base utilisateur mal protégée qu’avec un mot de passe qui circulerait en clair sur internet car aujourd’hui, c’est plus « simple » pour un pirate de pirater une base que de brancher un câble en sniffer sur un réseau puis de se taper le décodage de Go de paquets pour trouver enfin un mot de passe…

    Cela ne veut pas dire qu’il ne faut pas crypter un minimum les données qui circulent sur le net mais la protection des bases est bien plus importante car le vrai risque est là…

  5. @Olivier: Oui, je suis d’accord, d’où l’intérêt d’avoir différents passwords, en fonction de la fiabilité et de la sécurité que l’on peut accorder à telle ou telle application. Par exemple, on pourra davantage faire confiance a priori à des gros sites tels que Google/Facebook (même s’ils ont été la cible de piratages de password) qu’à un petit forum qui peut se faire hacker relativement facilement via un exploit du CMS/moteur de forum qu’il utilise.

  6. @Louis: Plutôt pas d’accord, si la gestion des mots de passe est correcte (pas d’enregistrement en clair, pas d’injection simple, condensat fort, etc.) et qu’on utilise des mots de passe digne de ce nom (peu de probabilité d’être dans une rainbow table, etc.) on peut même afficher les condensats en ligne, ça craint rien.
    Automatiser la récupération de tous les mdp qui passe sur des canaux non chiffrés, ça existe depuis des années. Avec les réseaux commutés, le HTTPS qui se répand, etc. c’est plus simple de taper un site mal écrit mais l’analyse du traffic en live, c’est trivial.

  7. Chacun son point de vue… Pour pouvoir sniffer un lien, encore faut-il pouvoir se connecter en dérivation dessus. Le snifing WIFI, c’est de plus en plus compliqué avec l’encryptage par défaut qui est en place presque partout…

  8. SOS WRNING INTERNET:slt je suis Etudiant en Afrique. J’utilise un MODEM 56K (ethernet).J’aimerai avoir quelques astuce pour me CONNECTER gratuitement. En FAIT lorsque je lance I explorer je tombe automatiquement sur la page d’accueil de mon fournisseur internet ou on me demande le code a 12 chiffres d’une carte prépayée.COMMENT est ce que je peux contourner cette protection ?. kingjonext@yahoo.fr

  9. Superbe outil ! je m’y suis mis aussi doucement en faisant un compteur de mots assez basique. Je vais m’essayer au générateur 🙂

Les commentaires sont fermés.