Après avoir construit le générateur de mots de passe, j'ai reçu des critiques étonnantes, et deux m'ont marqué : Guillaume Ste-Marie a préconisé l'utilisation de graines pour augmenter le caractère aléatoire, et Christian Ledermann a également préconisé que les secrets devrait remplacer random car random n'est pas vraiment aléatoire.
Le module secrets génère des nombres aléatoires cryptographiquement forts, adaptés à la gestion de données telles que les mots de passe, l'authentification de compte, les jetons de sécurité et les secrets associés.
Commençons par examiner l'intégralité du code de notre générateur de mot de passe sécurisé. Ne vous inquiétez pas si cela semble intimidant ; nous le décomposerons ligne par ligne dans la section suivante.
import secrets import string def generate_password(length=12): characters = string.ascii_letters + string.digits + string.punctuation password = ''.join(secrets.choice(characters) for _ in range(length)) return password def main(): print("Welcome to the Secure Password Generator!") try: length = int(input("Enter the desired password length: ")) if length <= 0: raise ValueError("Password length must be positive") except ValueError as e: print(f"Invalid input: {e}") print("Using default length of 12 characters.") length = 12 password = generate_password(length) print(f"\nYour generated password is: {password}") if __name__ == "__main__": main()
Maintenant, décomposons cela et examinons chaque partie en détail.
import secrets import string
Ces deux lignes importent les modules dont nous avons besoin pour notre générateur de mots de passe sécurisé :
Le module secrets fournit des fonctions permettant de générer des nombres aléatoires cryptographiquement forts, adaptés à la gestion des secrets tels que les mots de passe. C'est plus sécurisé que le module aléatoire à des fins cryptographiques.
Le module string propose des constantes contenant différents types de caractères (lettres, chiffres, ponctuation). Cela nous évite de saisir manuellement tous les caractères possibles que nous pourrions souhaiter dans un mot de passe.
def generate_password(length=12): characters = string.ascii_letters + string.digits + string.punctuation password = ''.join(secrets.choice(characters) for _ in range(length)) return password
Cette fonction génère notre mot de passe sécurisé :
Nous créons une chaîne de caractères contenant tous les caractères possibles pour notre mot de passe.
Nous utilisons secrets.choice() pour sélectionner aléatoirement les caractères de cette chaîne. C'est plus sécurisé que d'utiliser random.choice() car il utilise le générateur de nombres aléatoires cryptographiquement sécurisé du système d'exploitation.
Nous joignons ces caractères en une seule chaîne pour former notre mot de passe.
def main(): print("Welcome to the Secure Password Generator!") try: length = int(input("Enter the desired password length: ")) if length <= 0: raise ValueError("Password length must be positive") except ValueError as e: print(f"Invalid input: {e}") print("Using default length of 12 characters.") length = 12 password = generate_password(length) print(f"\nYour generated password is: {password}")
Cette fonction gère l'interaction de l'utilisateur :
if __name__ == "__main__": main()
Ce bloc garantit que la fonction main() n'est appelée que si le script est exécuté directement, pas s'il est importé en tant que module.
Voici quelques idées pour améliorer encore votre générateur de mots de passe :
En utilisant le module secrets au lieu du module aléatoire, nous avons créé un générateur de mots de passe plus sécurisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!