[PYTHON] Hinweise zur Erstellung des Kennwortgenerators

Vorderer Rahmen

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.

Anforderungen zu zielen

――Ich möchte es zuerst zu einer Klasse und schließlich zu einer Webanwendung machen.

Informieren Sie sich zunächst über Zufallszahlen

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.

Mach es zu einer Funktion

Nehmen Sie die Länge des Passworts als Argument

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.

Nehmen Sie die minimale Anzahl von Vorkommen jedes Zeichens als Argument

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.

Versuchen Sie, die Argumente aufzulisten

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)

Recommended Posts

Hinweise zur Erstellung des Kennwortgenerators
Gemusterter Passwortgenerator
Hash Passwort Generator
Generator
Generator