87 votes

générateur de mot de passe en javascript

Quelle serait la meilleure approche pour créer un mot de passe aléatoire de 8 caractères contenant a-z , A-Z y 0-9 ?

Il n'y a absolument aucun problème de sécurité, il s'agit simplement d'un prototypage, je veux juste des données qui semblent réalistes.

Je pensais à un for (0 to 7) Math.random pour produire des codes ASCII et les convertir en caractères. Avez-vous d'autres suggestions ?

6voto

Stephan Hoyer Points 861

Si vous disposez de lodash >= 4.0, il existe un moyen plus élégant de le faire.

var chars = 'abcdefghkmnpqrstuvwxyz23456789';
function generatePassword(length) {
  return _.sampleSize(chars, length).join('');
}

4voto

Harry Moreno Points 1254

Cela produira un mot de passe réaliste si vous avez des caractères [\]^_ est bien. Nécessite lodash et es7

String.fromCodePoint(...range(8).map(() => Math.floor(Math.random() * 57) + 0x41))

et voici sans lodash

String.fromCodePoint(...Array.from({length: 8}, () => Math.floor(Math.random() * 57) + 65))

4voto

Phi Tien Points 41

Voici une fonction qui vous offre plus d'options pour définir le minimum de caractères spéciaux, le minimum de caractères supérieurs, le minimum de caractères inférieurs et le minimum de chiffres.

function randomPassword(len = 8, minUpper = 0, minLower = 0, minNumber = -1, minSpecial = -1) {
    let chars = String.fromCharCode(...Array(127).keys()).slice(33),//chars
        A2Z = String.fromCharCode(...Array(91).keys()).slice(65),//A-Z
        a2z = String.fromCharCode(...Array(123).keys()).slice(97),//a-z
        zero2nine = String.fromCharCode(...Array(58).keys()).slice(48),//0-9
        specials = chars.replace(/\w/g, '')
    if (minSpecial < 0) chars = zero2nine + A2Z + a2z
    if (minNumber < 0) chars = chars.replace(zero2nine, '')
    let minRequired = minSpecial + minUpper + minLower + minNumber
    let rs = [].concat(
        Array.from({length: minSpecial ? minSpecial : 0}, () => specials[Math.floor(Math.random() * specials.length)]),
        Array.from({length: minUpper ? minUpper : 0}, () => A2Z[Math.floor(Math.random() * A2Z.length)]),
        Array.from({length: minLower ? minLower : 0}, () => a2z[Math.floor(Math.random() * a2z.length)]),
        Array.from({length: minNumber ? minNumber : 0}, () => zero2nine[Math.floor(Math.random() * zero2nine.length)]),
        Array.from({length: Math.max(len, minRequired) - (minRequired ? minRequired : 0)}, () => chars[Math.floor(Math.random() * chars.length)]),
    )
    return rs.sort(() => Math.random() > Math.random()).join('')
}
randomPassword(12, 1, 1, -1, -1)// -> DDYxdVcvIyLgeB
randomPassword(12, 1, 1, 1, -1)// -> KYXTbKf9vpMu0
randomPassword(12, 1, 1, 1, 1)// -> hj|9)V5YKb=7

3voto

code_burgar Points 6845

La solution de Gumbo ne fonctionne pas. Mais celle-ci fonctionne :

function makePasswd() {
  var passwd = '';
  var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  for (i=1;i<8;i++) {
    var c = Math.floor(Math.random()*chars.length + 1);
    passwd += chars.charAt(c)
  }

  return passwd;

}

3voto

e.vyushin Points 81

Je vois que beaucoup d'exemples sur cette page utilisent Math.random. Cette méthode n'a pas de valeurs aléatoires cryptographiquement fortes, elle n'est donc pas sûre. Au lieu de Math.random, nous vous recommandons d'utiliser getRandomValues ou votre propre alhorytme.

Vous pouvez utiliser passfather. C'est un paquet qui utilise beaucoup d'alhorytmes cryptographiquement forts. Je suis le propriétaire de ce paquet donc vous pouvez poser des questions.

passfather

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X