Je veux générer une chaîne aléatoire qui doit avoir 5 lettres de az et 3 nombres.
Comment puis-je faire cela avec JavaScript?
J'ai le script suivant, mais il ne répond pas à mes exigences.
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var string_length = 8;
var randomstring = '';
for (var i=0; i<string_length; i++) {
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum,rnum+1);
}
javascript
ffffff01
la source
la source
new Array(12).fill().map(() => String.fromCharCode(Math.random()*86+40)).join("")
Nifty one liner pour produire un mot de passe de 12 caractères avec des caractères spéciaux supérieurs et inférieurs dans une approche très légèreRéponses:
Forcer un nombre fixe de caractères est une mauvaise idée. Cela n'améliore pas la qualité du mot de passe. Pire, cela réduit le nombre de mots de passe possibles, de sorte que le piratage par bruteforcing devient plus facile.
Pour générer un mot aléatoire composé de caractères alphanumériques, utilisez:
Comment ça marche?
Documentation des méthodes
Number.prototype.toString
etstring.prototype.slice
.la source
Math.random().toString(36).substr(2, 8)
.toString
n'accepte qu'une base jusqu'à et y compris 36. Cette réponse est conçue comme une seule ligne pour une chaîne aléatoire non cryptographique. Si vous souhaitez également avoir des majuscules, utilisezMath.random
(oucrypto.getRandomValues
si disponible) et mappez le résultat sur az, AZ, 0-9. Par exemple, en utilisant la réponse de saaj ci-dessous.Une approche un peu plus maintenable et sécurisée.
la source
De nombreuses réponses (y compris l'original de celle-ci) ne répondent pas aux exigences de nombre de lettres et de nombres du PO. Voici deux solutions: générale (pas de lettres / chiffres min) et avec des règles.
Général:
Je pense que c'est une meilleure solution générale que la précédente, car:
Notez que
Trois lignes:
Ou, en one-liner:
Avec des règles de lettres / nombres
Maintenant, une variation sur ce qui précède. Cela générera trois chaînes aléatoires à partir des jeux de caractères donnés (lettre, nombre, soit), puis brouillera le résultat.
Veuillez noter que ci-dessous utilise sort () à des fins d'illustration uniquement. Pour une utilisation en production, remplacez la fonction sort () ci-dessous par une fonction de lecture aléatoire telle que Durstenfeld .
Tout d'abord, en fonction:
Même chose, comme un 2 lignes (certes, des lignes très longues et laides - et ne sera pas un 1-ligne si vous utilisez une fonction de lecture aléatoire appropriée. Non recommandé mais parfois c'est amusant quand même):
la source
Pour quelqu'un qui recherche un script le plus simple. Non
while (true)
, nonif/else
, pas de déclaration.Basé sur la réponse de mwag, mais celui-ci utilise
crypto.getRandomValues
, un aléatoire plus fort queMath.random
.Voir ceci pour
0xffffffff
.Alternative 1
Alternative 2
Node.js
la source
+ 1
pièce n'est pas nécessaire et peut être retirée.crypto.getRandomValues
par crypto.randomFillSync .Ce n'est pas exactement optimisé, mais cela devrait fonctionner.
Voici un jsfiddle à tester sur: http://jsfiddle.net/sJGW4/3/
la source
chars.substring(rnum, rnum+1)
est juste commechars.charAt(rnum)
Si vous avez besoin d'un mot de passe généré avec au moins 1 chiffre, 1 caractère majuscule et 1 caractère minuscule:
Voici le violon si vous voulez jouer / tester: http://jsfiddle.net/sJGW4/155/
Props à @mwag pour m'avoir donné le départ pour créer ceci.
la source
j
: P Sinon, de bonnes choses ici. Je l'ai un peu modifié pour répondre à mes besoins.Comme le note @RobW, restreindre le mot de passe à un nombre fixe de caractères comme proposé dans le schéma OP est une mauvaise idée . Mais pire, les réponses qui proposent du code basé sur
Math.random
sont, eh bien, une très mauvaise idée .Commençons par la mauvaise idée . Le code OP sélectionne au hasard une chaîne de 8 caractères parmi un ensemble de 62. Restreindre la chaîne aléatoire à 5 lettres et 3 chiffres signifie que les mots de passe résultants auront, au mieux , 28,5 bits d'entropie (par opposition à un potentiel de 47,6 bits si la restriction de distribution de 5 lettres et 3 chiffres a été supprimée). Ce n'est pas très bon. Mais en réalité, la situation est encore pire. Au mieux, l' aspect du code est détruit par l'utilisation de
Math.random
comme moyen de générer une entropie pour les mots de passe.Math.random
est un générateur de nombres pseudo aléatoires . En raison de la nature déterministe des générateurs de nombres pseudo aléatoires, l'entropie des mots de passe résultants est vraiment mauvaise, rendant une telle solution proposée une très mauvaise idée . En supposant que ces mots de passe sont distribués aux utilisateurs finaux (o / w à quoi ça sert), un adversaire actif qui reçoit un tel mot de passe a de très bonnes chances de prédire les futurs mots de passe distribués à d'autres utilisateurs, et ce n'est probablement pas une bonne chose.Mais revenons à la mauvaise idée . Supposons qu'un générateur de nombres pseudo aléatoires cryptographiquement fort soit utilisé à la place de
Math.random
. Pourquoi limiteriez-vous les mots de passe à 28,5 bits? Comme indiqué, ce n'est pas très bon. Vraisemblablement, le schéma à 5 lettres et 3 chiffres est d'aider les utilisateurs à gérer les mots de passe distribués au hasard. Mais avouons - le, vous devez équilibrer la facilité d'utilisation contre la valeur d'utilisation et 28,5 bits d'entropie est pas beaucoup de valeur dans la défense contre un adversaire actif.Mais assez de mauvais. Proposons une voie à suivre. J'utiliserai la bibliothèque JavaScript EntropyString qui "génère efficacement des chaînes aléatoires cryptographiquement fortes d'entropie spécifiée à partir de divers jeux de caractères". Plutôt que les caractères OP 62, j'utiliserai un jeu de caractères avec 32 caractères choisis pour réduire l'utilisation de caractères facilement confondus ou la formation de mots anglais. Et plutôt que le schéma à 5 lettres et 3 chiffres (qui a trop peu d'entropie), je proclamerai que le mot de passe aura 60 bits d'entropie (c'est l'équilibre entre facilité et valeur).
Notez que l'argument
random.string
est les bits d'entropie souhaités, par opposition aux solutions les plus courantes de génération de chaînes aléatoires qui spécifient le passage d'une longueur de chaîne (ce qui est à la fois mal orienté et généralement sous-spécifié, mais c'est une autre histoire).la source
J'en ai écrit un petit inspiré de votre réponse:
Cette fonction renvoie le mot de passe et peut être utilisée dans le bookmarklet comme:
la source
Je ne recommanderais pas d'utiliser un mot de passe forcé car il restreint la sécurité de l'utilisateur, mais de toute façon, il existe plusieurs façons de le faire -
Méthode JavaScript traditionnelle -
Utilisation d'une chaîne aléatoire
Installez une chaîne aléatoire:
Utilisation dans App.js -
La valeur de votre mot de passe est conservée dans la variable
yourString
.N'utilisez pas de mot de passe forcé!
Le mot de passe forcé peut nuire à votre sécurité car tous les mots de passe seraient sous le même jeu de caractères, ce qui pourrait facilement être violé!
la source
Ok donc si je comprends bien que vous essayez d'obtenir un mot de passe de chaîne aléatoire qui contient 5 lettres et 3 chiffres positionnés au hasard et qui a donc une longueur de 8 caractères et que vous acceptez les lettres maj et min, vous pouvez le faire avec la fonction suivante :
la source
la source
Et enfin, sans utiliser de hacks en virgule flottante:
la source
Mot de passe sécurisé avec un caractère majuscule.
la source
Mon Crypto basé sur le problème. Utiliser ES6 et omettre toute vérification des fonctionnalités du navigateur. Des commentaires sur la sécurité ou les performances?
la source
Essayez ceci, cela fonctionne. Téléchargez le script sur votre application javascript et appelez la fonction randomPassword () https://gist.github.com/enishant/4ba920c71f338e83c7089dc5d6f33a64
la source
Créez un service de générateur de mot de passe appelé PassswordGeneratorService
n'oubliez pas d'ajouter le service sur le module que vous utilisez
Sur votre contrôleur, ajoutez une méthode qui appelle la méthode de génération de mot de passe dans le service et définissez le résultat dans le champ de mot de passe
la source
generatePassword
et de l'utiliser, pas besoin de toute une classe. thnxIl existe un générateur de chaîne de mot de passe aléatoire avec une longueur sélectionnée
la source
Eh bien, vous pouvez toujours utiliser l'objet window.crypto disponible dans la version récente du navigateur.
Il suffit d'une ligne de code pour obtenir un nombre aléatoire:
Il aide également à crypter et décrypter les données. Plus d'informations sur la documentation Web MDN - window.crypto .
la source