Ich möchte eine zufällige Zeichenfolge generieren, die 5 Buchstaben aus az und 3 Zahlen enthalten muss.
Wie kann ich das mit JavaScript machen?
Ich habe das folgende Skript, aber es entspricht nicht meinen Anforderungen.
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
quelle
quelle
new Array(12).fill().map(() => String.fromCharCode(Math.random()*86+40)).join("")
Einundfünfzig Liner, um ein 12-Zeichen-Passwort mit speziellen Zeichen oberen unteren Zahlen in einem sehr leichten Ansatz zuAntworten:
Das Erzwingen einer festen Anzahl von Zeichen ist eine schlechte Idee. Die Qualität des Passworts wird dadurch nicht verbessert. Schlimmer noch, es reduziert die Anzahl möglicher Passwörter, so dass das Hacken durch Bruteforcing einfacher wird.
Verwenden Sie Folgendes, um ein zufälliges Wort zu generieren, das aus alphanumerischen Zeichen besteht:
Wie funktioniert es?
Dokumentation für die
Number.prototype.toString
undstring.prototype.slice
Methoden.quelle
Math.random().toString(36).substr(2, 8)
.toString
akzeptiert nur eine Basis bis einschließlich 36. Diese Antwort ist als Einzeiler für eine nicht kryptografische Zufallszeichenfolge gedacht. Wenn Sie auch Großbuchstaben haben möchten, verwenden SieMath.random
(odercrypto.getRandomValues
falls verfügbar) und ordnen Sie das Ergebnis az, AZ, 0-9 zu. Zum Beispiel mit Saajs Antwort unten.Ein wenig wartbarer und sicherer Ansatz.
quelle
Viele Antworten (einschließlich des Originals dieser Antwort) entsprechen nicht den Anforderungen des OP an die Anzahl der Buchstaben und Zahlen. Nachfolgend sind zwei Lösungen aufgeführt: Allgemein (keine minimalen Buchstaben / Zahlen) und mit Regeln.
Allgemeines:
Ich glaube, dies ist eine bessere allgemeine Lösung als die oben genannte, weil:
Beachten Sie, dass
Dreiliner:
Oder als Einzeiler:
Mit Buchstaben- / Zahlenregeln
Nun eine Variation des oben genannten. Dadurch werden drei zufällige Zeichenfolgen aus den angegebenen Zeichensätzen (Buchstaben oder Zahlen) generiert und das Ergebnis verschlüsselt.
Bitte beachten Sie, dass im Folgenden sort () nur zur Veranschaulichung verwendet wird. Für den produktiven Einsatz, ersetzen Sie die unten sort () Funktion mit einem Shuffle - Funktion wie Durstenfeld .
Erstens als Funktion:
Das Gleiche gilt für einen 2-Liner (zugegebenermaßen sehr lange und hässliche Linien - und wird kein 1-Liner sein, wenn Sie eine ordnungsgemäße Shuffle-Funktion verwenden. Nicht empfohlen, aber manchmal macht es trotzdem Spaß):
quelle
Für jemanden, der nach einem einfachsten Skript sucht. Nein
while (true)
, neinif/else
, keine Erklärung.Basiert auf der Antwort von mwag, aber diese verwendet
crypto.getRandomValues
einen stärkeren Zufall alsMath.random
.Sehen dies für
0xffffffff
.Alternative 1
Alternative 2
Node.js
quelle
+ 1
Teil ist nicht erforderlich und kann entfernt werden.crypto.getRandomValues
mit crypto.randomFillSync .Dies ist nicht genau optimiert, sollte aber funktionieren.
Wenn Sie
Hier ist eine jsfiddle, auf der Sie testen können: http://jsfiddle.net/sJGW4/3/
quelle
chars.substring(rnum, rnum+1)
ist genau wiechars.charAt(rnum)
Falls Sie ein Passwort benötigen, das mit mindestens 1 Nummer, 1 Großbuchstaben und 1 Kleinbuchstaben generiert wurde:
Hier ist die Geige, wenn Sie spielen / testen möchten: http://jsfiddle.net/sJGW4/155/
Props an @mwag für den Start, um dies zu erstellen.
quelle
j
: P Ansonsten gute Sachen hier. Es wurde jedoch ein wenig geändert, um meinen Anforderungen zu entsprechen.Wie @RobW feststellt, ist es eine schlechte Idee , das Kennwort auf eine feste Anzahl von Zeichen zu beschränken, wie im OP-Schema vorgeschlagen . Aber schlimmer noch, Antworten, die Code basierend auf vorschlagen
Math.random
, sind eine wirklich schlechte Idee .Beginnen wir mit der schlechten Idee . Der OP-Code wählt zufällig eine Zeichenfolge mit 8 Zeichen aus einem Satz von 62 Zeichen aus. Wenn die zufällige Zeichenfolge auf 5 Buchstaben und 3 Zahlen beschränkt wird, haben die resultierenden Kennwörter bestenfalls 28,5 Bit Entropie (im Gegensatz zu einem Potenzial von 47,6 Bit) wenn die Verteilungsbeschränkung von 5 Buchstaben und 3 Zahlen aufgehoben wurde). Das ist nicht sehr gut In Wirklichkeit ist die Situation jedoch noch schlimmer. Der beste Aspekt des Codes wird durch die Verwendung
Math.random
als Mittel zur Erzeugung von Entropie für die Passwörter zerstört.Math.random
ist ein Pseudozufallszahlengenerator . Aufgrund der deterministischen Natur von Pseudozufallszahlengeneratoren ist die Entropie der resultierenden Passwörter wirklich schlechtDies macht eine solche vorgeschlagene Lösung zu einer wirklich schlechten Idee . Angenommen, diese Passwörter werden an Endbenutzer verteilt (o / w, worum geht es), hat ein aktiver Gegner, der ein solches Passwort erhält, sehr gute Chancen, zukünftige Passwörter vorherzusagen, die an andere Benutzer verteilt werden, und das ist wahrscheinlich keine gute Sache.Aber zurück zu der einfach schlechten Idee . Angenommen, stattdessen wird ein kryptografisch starker Pseudozufallszahlengenerator verwendet
Math.random
. Warum sollten Sie die Passwörter auf 28,5 Bit beschränken? Wie gesagt, das ist nicht sehr gut. Vermutlich soll das Schema mit 5 Buchstaben und 3 Zahlen den Benutzern bei der Verwaltung zufällig verteilter Passwörter helfen. Aber seien wir ehrlich, haben Sie balancieren einfache Bedienung gegen Nutzwertes abwägen, und 28,5 Bit Entropie sind für die Verteidigung gegen einen aktiven Gegner nicht sehr wertvoll.Aber genug von dem Bösen. Lassen Sie uns einen Weg vorwärts vorschlagen. Ich werde die JavaScript EntropyString- Bibliothek verwenden, die "effizient kryptografisch starke Zufallszeichenfolgen mit bestimmter Entropie aus verschiedenen Zeichensätzen generiert". Anstelle der OP 62-Zeichen verwende ich einen Zeichensatz mit 32 Zeichen, um die Verwendung von leicht verwirrbaren Zeichen oder die Bildung von englischen Wörtern zu reduzieren. Und anstatt des 5-Buchstaben-3-Zahlen-Schemas (das zu wenig Entropie aufweist) werde ich verkünden, dass das Passwort 60 Bit Entropie enthält (dies ist das Gleichgewicht zwischen Leichtigkeit und Wert).
Beachten Sie, dass das Argument für
random.string
die gewünschten Entropiebits ist, im Gegensatz zu häufigeren Lösungen für die Erzeugung zufälliger Zeichenfolgen, bei denen die Übergabe in einer Zeichenfolgenlänge angegeben wird (die sowohl falsch als auch normalerweise nicht spezifiziert ist, aber das ist eine andere Geschichte).quelle
Ich habe eine kleine geschrieben, die von Ihrer Antwort inspiriert ist:
Diese Funktion gibt das Passwort zurück und kann im Lesezeichen verwendet werden wie:
quelle
Ich würde nicht empfehlen, ein erzwungenes Passwort zu verwenden, da dies die Sicherheit des Benutzers einschränkt. Es gibt jedoch einige Möglichkeiten, dies zu tun:
Traditionelle JavaScript-Methode -
Zufällige Zeichenfolge verwenden
Zufällige Zeichenfolge installieren:
Verwenden Sie es in App.js -
Der Wert Ihres Passworts wird in der Variablen gespeichert
yourString
.Verwenden Sie kein erzwungenes Passwort!
Erzwungenes Passwort kann Ihre Sicherheit beeinträchtigen, da sich alle Passwörter unter demselben Zeichensatz befinden, der leicht verletzt werden kann!
quelle
Ok, wenn ich gut verstehe, dass Sie versuchen, ein zufälliges Zeichenfolgenkennwort zu erhalten, das 5 Buchstaben und 3 Zahlen enthält, die zufällig positioniert sind und eine Länge von 8 Zeichen haben und Sie Maj- und Min-Buchstaben akzeptieren, können Sie dies mit der folgenden Funktion tun ::
quelle
quelle
Und schließlich ohne Gleitkomma-Hacks:
quelle
Sicheres Passwort mit einem Zeichen für Großbuchstaben.
quelle
Meine Crypto-basierte Version übernimmt das Problem. Verwenden von ES6 und Weglassen von Überprüfungen der Browserfunktionen. Kommentare zur Sicherheit oder Leistung?
quelle
Versuchen Sie dies, es funktioniert. Laden Sie das Skript in Ihre Javascript-Anwendung herunter und rufen Sie die Funktion randomPassword () https://gist.github.com/enishant/4ba920c71f338e83c7089dc5d6f33a64 auf
quelle
Erstellen Sie einen Kennwortgeneratordienst mit dem Namen PassswordGeneratorService
Vergessen Sie nicht, den Dienst auf dem von Ihnen verwendeten Modul hinzuzufügen
Fügen Sie auf Ihrem Controller eine Methode hinzu, die die Methode zum Generieren des Kennworts innerhalb des Dienstes aufruft, und legen Sie das Ergebnis im Kennwortfeld fest
quelle
generatePassword
und verwendet, ohne dass eine ganze Klasse benötigt wird. DankeEs gibt einen Generator für zufällige Kennwortzeichenfolgen mit ausgewählter Länge
quelle
Nun, Sie können immer das window.crypto-Objekt verwenden, das in der neuesten Version des Browsers verfügbar ist.
Benötigen Sie nur eine Codezeile, um eine Zufallszahl zu erhalten:
Es hilft auch, Daten zu verschlüsseln und zu entschlüsseln. Weitere Informationen finden Sie unter MDN-Webdokumente - window.crypto .
quelle