Un générateur de mots de passe en javascript
Posté le 12 juillet 2010 par Louis
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; }
}
Sur le même sujet :
- Un client pour Google Analytics simplement en HTML, CSS et JavaScript
- Une règle à pixel en ligne faite en Javascript/CSS et avec du drag-and-drop
- Site Checker, un URL-info fait avec mes mains, sur Google AppEngine
Faites un lien vers cet article sur votre site :

Le 12 juillet 2010 à 12:50
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
Le 12 juillet 2010 à 13:02
@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
Le 12 juillet 2010 à 15:56
La référence dans ce domaine : http://supergenpass.com/
Le 12 juillet 2010 à 15:59
@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.
Le 12 juillet 2010 à 16:04
Cf. la version mobile, c’est en fait la version avec je JS dans une page plutôt que dans un bookmarklet.
Le 12 juillet 2010 à 21:56
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à…
Le 13 juillet 2010 à 0:19
@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.
Le 13 juillet 2010 à 9:18
@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.
Le 13 juillet 2010 à 18:30
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…