Comment créer un générateur de mot de passe aléatoire en Python
La protection est un pilier fondamental de notre existence. Avec l'omniprésence du numérique, la nécessité d'une sécurité accrue devient de plus en plus flagrante. Au cœur de cette sécurité, on retrouve souvent les mots de passe.
Dans cet exposé, nous allons concevoir un générateur de mots de passe, un outil pratique pour produire rapidement des mots de passe complexes et aléatoires.
Pourquoi avons-nous besoin d'un tel outil?
Simplement, car il est difficile pour l'esprit humain de concevoir instantanément des suites de caractères complexes et variées.
Or, ce n'est pas un problème pour les ordinateurs. Ils peuvent élaborer des mots de passe aléatoires et robustes en quelques secondes, en fonction de nos critères. De nombreux générateurs de mots de passe sont déjà disponibles, mais...
Ne serait-il pas plus intéressant de créer le nôtre, avec les paramètres que l'on préfère?
Bien sûr, c'est tout à fait possible. Et nous allons vous montrer comment procéder.
Alors, lançons-nous dans la création de ce générateur de mots de passe.
Création d'un Générateur de Mots de Passe 💻
L'avantage majeur de concevoir son propre générateur est la personnalisation. On peut l'adapter à ses besoins et préférences.
Nous allons d'abord élaborer un générateur qui prendra en compte la longueur du mot de passe souhaitée et produira un mot de passe aléatoire contenant chiffres, lettres et caractères spéciaux.
Puis, nous l'améliorerons en demandant le nombre de chaque type de caractères désirés: combien de chiffres, de lettres, et de caractères spéciaux.
Sans plus attendre, voici les étapes pour créer un générateur de mots de passe en Python.
Démarche
- Mémoriser tous les caractères possibles dans une liste. On peut utiliser le module 'string' de Python ou les entrer manuellement.
- Demander à l'utilisateur la longueur du mot de passe.
- Mélanger les caractères à l'aide de la fonction 'random.shuffle'.
- Créer une liste vide pour stocker le mot de passe.
- Mettre en place une boucle qui s'exécute autant de fois que la longueur du mot de passe.
- Choisir un caractère aléatoire parmi tous ceux disponibles grâce à 'random.choice'.
- Ajouter ce caractère au mot de passe.
- Mélanger la liste de mot de passe résultante pour renforcer l'aspect aléatoire.
- Transformer la liste en une chaîne de caractères via 'join'.
- Afficher le mot de passe généré.
Suivez ces instructions et tentez d'écrire le code. Si vous rencontrez des difficultés, pas d'inquiétude, voici le code:
Code
import string
import random
## liste des caractères utilisables pour le mot de passe
caracteres = list(string.ascii_letters + string.digits + "[email protected]#$%^&*()")
def generer_mot_de_passe_aleatoire():
## longueur du mot de passe demandée à l'utilisateur
longueur = int(input("Saisissez la longueur du mot de passe: "))
## mélange des caractères
random.shuffle(caracteres)
## sélection aléatoire des caractères
mot_de_passe = []
for i in range(longueur):
mot_de_passe.append(random.choice(caracteres))
## mélange du mot de passe final
random.shuffle(mot_de_passe)
## transformation en chaîne de caractères et affichage
print("".join(mot_de_passe))
## appel de la fonction
generer_mot_de_passe_aleatoire()
Le code ci-dessus est assez explicite. Il suit simplement les étapes décrites précédemment. Vous ne devriez donc pas avoir de problèmes pour le comprendre.
Exécutez ce code pour générer un mot de passe. Voici un exemple de résultat possible:
Saisissez la longueur du mot de passe: 10 d&amIzK%d)
Remarquez-vous que le mot de passe généré ne contient pas de chiffres? En effet, il n'y a aucune garantie que le programme en inclue.
Nous allons maintenant faire en sorte que le programme inclue au minimum le nombre de chiffres, de lettres et de caractères spéciaux demandés par l'utilisateur.
Lorsque l'utilisateur saisira le nombre de caractères de chaque type, le programme inclura le nombre correspondant dans le mot de passe.
Voici le code qui prend en compte le nombre de chaque type de caractères:
import string
import random
## listes de caractères utilisables
lettres = list(string.ascii_letters)
chiffres = list(string.digits)
caracteres_speciaux = list("[email protected]#$%^&*()")
caracteres = list(string.ascii_letters + string.digits + "[email protected]#$%^&*()")
def generer_mot_de_passe_aleatoire():
## longueur du mot de passe
longueur = int(input("Saisissez la longueur du mot de passe: "))
## nombre de chaque type de caractères
nombre_lettres = int(input("Nombre de lettres dans le mot de passe: "))
nombre_chiffres = int(input("Nombre de chiffres dans le mot de passe: "))
nombre_caracteres_speciaux = int(input("Nombre de caractères spéciaux dans le mot de passe: "))
nombre_caracteres_total = nombre_lettres + nombre_chiffres + nombre_caracteres_speciaux
## vérification de la cohérence avec la longueur
if nombre_caracteres_total > longueur:
print("Le nombre total de caractères est supérieur à la longueur du mot de passe")
return
## initialisation du mot de passe
mot_de_passe = []
## ajout des lettres aléatoires
for i in range(nombre_lettres):
mot_de_passe.append(random.choice(lettres))
## ajout des chiffres aléatoires
for i in range(nombre_chiffres):
mot_de_passe.append(random.choice(chiffres))
## ajout des caractères spéciaux aléatoires
for i in range(nombre_caracteres_speciaux):
mot_de_passe.append(random.choice(caracteres_speciaux))
## si le total est inférieur à la longueur, on complète avec des caractères aléatoires
if nombre_caracteres_total < longueur:
random.shuffle(caracteres)
for i in range(longueur - nombre_caracteres_total):
mot_de_passe.append(random.choice(caracteres))
## mélange du mot de passe
random.shuffle(mot_de_passe)
## affichage
print("".join(mot_de_passe))
## appel de la fonction
generer_mot_de_passe_aleatoire()
Alors, quelle est la différence entre ce code et le précédent?
- Nous avons séparé les boucles pour chaque type de caractères afin de les ajouter au mot de passe.
- Deux tests conditionnels ont été mis en place pour vérifier la cohérence du nombre de caractères avec la longueur du mot de passe.
Nous avons ajouté un peu de code supplémentaire, mais le schéma reste le même. Vous ne devriez pas avoir de problème à le comprendre.
Il est temps de l'exécuter et de vérifier le résultat. Voici un exemple:
Saisissez la longueur du mot de passe: 10 Nombre de lettres dans le mot de passe: 3 Nombre de chiffres dans le mot de passe: 2 Nombre de caractères spéciaux dans le mot de passe: 3 V2(&#XlQq1
Si vous observez le mot de passe généré, il contient bien au minimum le nombre de caractères spécifié par l'utilisateur. Le programme a également ajouté des caractères aléatoires pour que la longueur du mot de passe corresponde à la saisie de l'utilisateur.
Félicitations! Nous avons désormais un générateur de mots de passe robuste. 😎
Conclusion
Nous avons appris à créer un générateur de mots de passe à partir de zéro. Est-il possible d'y ajouter d'autres fonctionnalités? Bien sûr! On peut y ajouter autant de fonctionnalités que désiré. Il est important de s'assurer que le mot de passe généré soit suffisamment complexe.
N'hésitez pas à utiliser ce code pour générer des mots de passe et les utiliser pour vos comptes en ligne.
Vous pouvez également faire appel au générateur de mots de passe aléatoires de toptips.fr pour créer des mots de passe sécurisés.
Pour aller plus loin, découvrez comment écrire le code pour faire un jeu de tic-tac-toe en Python.
Bon codage ! 👩💻