Quel est le moyen le plus rapide de générer un mot de passe sécurisé dans JavaScript? P>
Je veux qu'il contienne au moins 1 caractère spécial et 2 cas mixte. Doit avoir au moins 6 caractères de long. P>
6 Réponses :
Voici quelques fonctions utiles code> String CODE>:
var specials = '!@#$%^&*()_+{}:"<>?\|[];\',./`~'; var lowercase = 'abcdefghijklmnopqrstuvwxyz'; var uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var numbers = '0123456789'; var all = specials + lowercase + uppercase + numbers; var password = ''; password += specials.pick(1); password += lowercase.pick(1); password += uppercase.pick(1); password += all.pick(3, 10); password = password.shuffle();
Je suis nouveau à PHP. Comment puis-je pouvoir appeler cela à partir d'un bouton avec Onclick?
Bonne réponse - ce dont j'avais besoin. J'ai ajouté mot de passe + = numéros.pick (1) code> pour vous assurer qu'un numéro est inclus.
Jolie solution, thx, mais dans la ligne n = min + math.floor (math.random () * (max-min)); code> Je remplacerais
math.floor code> avec
math.round code>. Le
max code> n'a pas pu être atteint.
@algorythm: mais max est this.length code>, qui ne doit pas être atteint si vous l'utilisez pour indexer une chaîne.
Je ne sais pas si je comprends ... choisir code> choisit un nombre limité de caractères aléatoires hors d'une chaîne. Et quand j'appelle la méthode avec
min code> et
max code> Je m'attends à ce que la longueur minimale soit
min code> et la longueur maximale est
max code>. Qu'est-ce que cela a à voir avec indexation d'une chaîne? Avez-vous un exemple?
@algorythm: Je regardais la ligne ci-dessous celle que vous avez référencée, désolé. Fixé.
Math.random () n'est pas une source de hasard sécurisée. Cette réponse est faux.
Je viens de recevoir le message maintenant. C'est une mauvaise idée d'utiliser math.random () si vous pouvez passer quelques minutes à regarder Cet article . p>
En réalité, il y a une API crypto dans de nouveaux navigateurs et vous devez l'utiliser dès que vous commencez quelque chose qui touche la cryptographie. P>
C'est pourquoi je recommande d'utiliser Ma bibliothèque qui utilise la célèbre API Crypto. Il fonctionne à la fois sur le serveur et le côté client (Nodejs et navigateurs). P>
mk - p>
Ce serait une bonne idée, en ce qui concerne la transparence, de mentionner que c'est votre propre travail.
Heureux Quelqu'un a attiré le problème avec la réponse de @ Blender.
J'ai modifié la réponse de @ Blender pour le rendre plus sécurisé et sans modifier String.Prototype.
// Copy-pasted from: // https://stackoverflow.com/questions/12635652/generate-a-secure-password-in-javascript // and modified for Auth0. // // Auth0 requirements: // https://auth0.com/docs/connections/database/password-strength // // "at least 10 characters including at least 3 of the following 4 types of characters: // a lower-case letter, an upper-case letter, a number, a special character (such as !@#$%^&*). // Not more than 2 identical characters in a row (such as 111 is not allowed)". const specials = '!@#$%^&*()_+{}:"<>?\|[];\',./`~'; const lowercase = 'abcdefghijklmnopqrstuvwxyz'; const uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; const numbers = '0123456789'; const all = specials + lowercase + uppercase + numbers; export default function generatePassword() { let password = ''; password += pick(password, specials, 1, 3); password += pick(password, lowercase, 1, 3); password += pick(password, uppercase, 1, 3); password += pick(password, all, 10); return shuffle(password); } function pick(exclusions, string, min, max) { var n, chars = ''; if (max === undefined) { n = min; } else { n = min + Math.floor(Math.random() * (max - min + 1)); } var i = 0; while (i < n) { const character = string.charAt(Math.floor(Math.random() * string.length)); if (exclusions.indexOf(character) < 0 && chars.indexOf(character) < 0) { chars += character; i++; } } return chars; } // Credit to @Christoph: http://stackoverflow.com/a/962890/464744 function shuffle(string) { var array = string.split(''); var tmp, current, top = array.length; if (top) while (--top) { current = Math.floor(Math.random() * (top + 1)); tmp = array[current]; array[current] = array[top]; array[top] = tmp; } return array.join(''); }
Ce n'est pas un moyen sécurisé. Il serait possible de simuler la génération de mot de passe si elle dépend uniquement de la fonction mathématique (graine). Il serait plus sécurisé si vous essayez de relier la génération à l'événement utilisateur, comme le suivi de la souris (donc en utilisant différentes graines basées sur des actions de l'utilisateur). p>
Utilisez ce code pour un mot de passe fort: d
You could do some thing like below to generate password with following Requirements * At least One Special Character * At Least on Digit * At least on Upper Case * At least One Lower Case function generatePassword(passwordLength) { var numberChars = "0123456789"; var upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var lowerChars = "abcdefghijklmnopqrstuvwxyz"; var specialChars = "#?!@$%^&*-"; var allChars = numberChars + upperChars + lowerChars + specialChars; var randPasswordArray = Array(passwordLength); randPasswordArray[0] = numberChars; randPasswordArray[1] = upperChars; randPasswordArray[2] = lowerChars; randPasswordArray[3] = specialChars; randPasswordArray = randPasswordArray.fill(allChars, 4); return shuffleArray(randPasswordArray.map(function(x) { return x[Math.floor(Math.random() * x.length)] })).join(''); } function shuffleArray(array) { for (var i = array.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = array[i]; array[i] = array[j]; array[j] = temp; } return array; } //Change length accordingly alert(generatePassword(12));
N'utilisez pas de mode sécurisé et javascript dans le même contexte;) Laissez PHP générer des mots de passe au lieu de le faire du côté client.
Peut-être utile: Stackoverflow.com/questions/5840577/... et Stackoverflow.com/questions/2477862/...
Vérifiez ceci - Stackoverflow .com / questions / 9719570 / ...
Javascript a dominé les 5 dernières années. MDR