Je voulais rechercher et développer quelque chose moi-même, et j'étais intéressé par la génération de mots de passe depuis longtemps, alors j'ai décidé de le faire.
Puisque Python est une histoire courte, j'aimerais le faire facilement en utilisant la bibliothèque Python. Veuillez noter que le code est sale car je suis un amateur en matière de développement.
«Je veux d'abord en faire une classe, et enfin une application web.
En tant que prémisse majeure du mot de passe, ** quelque chose qui ne peut être deviné par les autres ** est recommandé, il est donc important de savoir comment sélectionner les caractères. Par conséquent, nous avons besoin d'un mécanisme pour sélectionner des personnages au hasard.
Python a un module aléatoire. https://docs.python.org/ja/3/library/random.html#module-random
Cependant, comme indiqué dans le document officiel ci-dessus, il ne dérive qu'une valeur quelque peu aléatoire qui peut être logiquement reproduite / devinée et ne convient pas à des fins de sécurité.
Par conséquent, il est recommandé de l'utiliser à des fins de sécurité, le module secrets basé sur la source de nombres aléatoires fournie par le système d'exploitation. https://docs.python.org/ja/3/library/secrets.html#module-secrets Ça y est. C'est bon.
De plus, si vous regardez de plus près, vous trouverez des recettes et des bonnes pratiques.
Pour générer un mot de passe à 10 caractères composé d'alphavets et de chiffres, comprenant au moins une lettre minuscule et au moins trois chiffres:
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
Jouons avec ça.
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
#La longueur du mot de passe peut être spécifiée par argument
result = generate_random.password_generater(16)
print(result)
Quand je l'exécute
7g29HnFJItLJoiB7
Ouais, ça fait du bien.
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
Comme il est défini sur 0 par défaut, il est généré une fois, sauf indication contraire.
Quand je l'exécute
zmoIBPQVU8MI3tJL
Il semble que la condition selon laquelle "au moins trois nombres apparaissent" dans la recette officielle a certainement disparu.
Après avoir essayé jusqu'à présent, j'ai eu l'idée qu'il serait pratique de dresser une liste du nombre d'occurrences, par exemple "Je veux spécifier uniquement le nombre minimum d'alphabets en majuscules!".
(Actuellement en construction)