Ich wollte selbst etwas erforschen und entwickeln und war lange Zeit an der Passwortgenerierung interessiert, also habe ich beschlossen, es zu machen.
Da Python eine Kurzgeschichte ist, möchte ich die Verwendung der Python-Bibliothek vereinfachen. Bitte beachten Sie, dass der Code schmutzig ist, da ich ein Amateur bin, wenn es um Entwicklung geht.
――Ich möchte es zuerst zu einer Klasse und schließlich zu einer Webanwendung machen.
Als wichtige Voraussetzung für das Passwort wird ** etwas empfohlen, das von anderen nicht erraten werden kann **. Daher ist es wichtig, wie Zeichen ausgewählt werden. Daher benötigen wir einen Mechanismus zur zufälligen Auswahl von Zeichen.
Python hat ein zufälliges Modul. https://docs.python.org/ja/3/library/random.html#module-random
Wie im obigen offiziellen Dokument angegeben, leitet es jedoch nur einen etwas zufälligen Wert ab, der logisch reproduziert / erraten werden kann und aus Sicherheitsgründen nicht geeignet ist.
Daher wird empfohlen, aus Sicherheitsgründen das Geheimmodul zu verwenden, das auf der vom Betriebssystem bereitgestellten Zufallszahlenquelle basiert. https://docs.python.org/ja/3/library/secrets.html#module-secrets Das ist es. Das ist gut.
So generieren Sie ein 10-stelliges Passwort, das aus Buchstaben und Zahlen besteht, einschließlich mindestens eines Kleinbuchstaben und mindestens drei Zahlen:
generate_password_best_practice.py
import string
import secrets
alphabet = string.ascii_letters + string.digits
while True:
password = ''.join(secrets.choice(alphabet) for i in range(10))
if (any(c.islower() for c in password)
and any(c.isupper() for c in password)
and sum(c.isdigit() for c in password) >= 3):
break
Lass uns damit spielen.
generate_random.py
import string
import secrets
alphabet = string.ascii_letters + string.digits
def password_generater(password_length):
while True:
password = ''.join(secrets.choice(alphabet) for i in range(password_length))
if (any(c.islower() for c in password) and any(c.isupper() for c in password) and sum(c.isdigit() for c in password) >= 3):
break
return password
main.py
import generate_random
#Die Kennwortlänge kann durch ein Argument angegeben werden
result = generate_random.password_generater(16)
print(result)
Wenn ich es laufen lasse
7g29HnFJItLJoiB7
Ja, es fühlt sich gut an.
generate_random.py
import string
import secrets
alphabet = string.ascii_letters + string.digits
def password_generater(password_length, lower_letters_min=0, upper_letters_min=0, digit_min=0):
while True:
password = ''.join(secrets.choice(alphabet) for i in range(password_length))
if (sum(c.islower() for c in password) >= lower_letters_min and sum(c.isupper() for c in password) >= upper_letters_min and sum(c.isdigit() for c in password) >= digit_min):
break
return password
Da es standardmäßig auf 0 gesetzt ist, wird es einmal generiert, sofern nicht anders angegeben.
Wenn ich es laufen lasse
zmoIBPQVU8MI3tJL
Es scheint, dass die Bedingung, dass "mindestens drei Zahlen erscheinen" im offiziellen Rezept ist, sicherlich weg ist.
Nachdem ich es bisher versucht hatte, kam ich auf die Idee, dass es bequemer wäre, eine Liste der Anzahl der Vorkommen zusammenzustellen, z. B. "Ich möchte nur die Mindestanzahl von Großbuchstaben angeben!".
(Derzeit im Bau)