Zufällige Passwort-Erzeugung mit Bedingungen
Arbeite ich an einem random password generator erstellen Sie Passwörter, die bestimmte Bedingungen erfüllen, einschließlich, aber nicht beschränkt auf:
- minimale Länge: muss mindestens 8 Zeichen enthalten
- Kleinbuchstaben: hat zu enthalten Kleinbuchstaben (ausgewählt aus einer Gruppe, um Probleme zu vermeiden, mit Zeichen, die verwechselt werden kann, wie zahlen)
- Großbuchstaben: hat, um die Großbuchstaben enthalten, (wieder gewählt aus)
- Ziffern: hat zahlen enthalten
Was wäre die beste Algorithmische Ansatz, um sicherzustellen, dass das generierte Kennwort erfüllt alle diese?
Ich bin nicht auf der Suche für eine komplette Lösung, ich brauche nur ein paar gute Ideen und Richtlinien.
- texamples.com/how-to-generate-random-passwords-in-java dies könnte helfen
- nicht sicher, dass dies eine gute Idee. Die Einschränkung, wie "2+" Ziffern, möglicherweise macht Sie das Kennwort weniger "zufällig", sondern als eher zufällig/besser.
Du musst angemeldet sein, um einen Kommentar abzugeben.
1) zufällig zu generieren Zahl L, welche die genaue Länge des Ihr Passwort ein. Nämlich, zu generieren ist, so dass es größer ist als 8
2) nach dem Zufallsprinzip generieren eine Reihe LL, die werden die Anzahl der Kleinbuchstaben. LC muss im Bereich [1..L-2]
3) zufällig generieren, Anzahl LU für Großbuchstaben. Muss im Bereich [1..L-LL-1]
4) LD = L-LL-LU Anzahl von Großbuchstaben, Ziffern
5) nach dem Zufallsprinzip generieren LL Kleinbuchstaben, LU Großbuchstaben, und LD Ziffern und halten Sie in einer Liste(array)
6) schieben Sie die array zufällig
hth
std::random_shuffle()
Methode 🙂Sollte der Algorithmus in der Regel erfolgreich auf die ersten paar Iterationen, und erspart Ihnen das implementieren einer shuffle-Algorithmus.
Gibt es eine alternative zu den präzisen Bau-vorgeschlagen von Armen. Wenn Sie die Bedingungen erfüllt werden können, die mit hoher Wahrscheinlichkeit dann:
In einer faulen Sprache dieser befindet sich in etwa 6 Zeilen nicht boilerplate-code und erfordert kein mischen.
EDIT: ja, Schritt ein Fenster wie in den Kommentaren, nicht schieben Sie ein Fenster. Danke!
abcd5efg...
. Wie Sie schieben Sie die Fenster, Sie abzulehnenab
,bc
,cd
und akzeptierend5
. Die Ziffer ist eher zu erscheinen, in die zweite position, weil, sobald es gleitet in dieser position das Passwort wird akzeptabel.loop input = let (s,r) = splitAt len input in if strProp s then s else loop r
. Zurück der Umschlag Berechnungen, sagt Sie erwarten sollten, um zu testen, 1.4 möglich Passwörter zu bekommen, einen gültigen (für 8 Zeichen, so erzeugen Sie ein Kennwort verbraucht 47 zufällige bytes im Durchschnitt).