Nous allons pas à pas créer une application Python capable de générer des mots de passe aléatoires basés sur des critères définis par l’utilisateur, tels que la longueur et les types de caractères. Un générateur de mots de passe est un excellent projet pour pratiquer les concepts fondamentaux de la programmation tout en explorant la création d’une interface graphique simple mais efficace.
Notre générateur de mot de passe devra :
- Premièrement permettre à l’utilisateur de spécifier la longueur du mot de passe.
- Deuxièmement offrir des options pour inclure ou non des majuscules, chiffres, et caractères spéciaux.
- Troisièmement, garantir un minimum de sécurité en respectant les choix de l’utilisateur.
- Et enfin, afficher le mot de passe généré dans une interface claire et simple.
Pour se faire, nous allons developper notre programme en Python et utiliser Tkinter pour l’interface graphique de l’utilisateur.
La code Python
1. Importer les bibliothèques nécessaires
Pour ce projet, nous utilisons les modules suivants :
tkinter
pour créer l’interface graphique.random
pour générer des caractères aléatoires.string
pour accéder aux types de caractères (lettres, chiffres, symboles).
Voici la première section du code :
import tkinter as tk
from tkinter import messagebox
import random
import string
2. Fonction pour générer le mot de passe
La fonction suivante récupère les choix de l’utilisateur, vérifie la validité de ces choix, puis génère un mot de passe sécurisé. Voici son fonctionnement :
- Étape 1 : Vérifier que l’utilisateur a saisi une longueur valide.
- Étape 2 : Construire une liste de caractères en fonction des options sélectionnées.
- Étape 3 : Garantir qu’au moins un caractère de chaque type choisi est inclus dans le mot de passe.
- Étape 4 : Mélanger les caractères pour obtenir un mot de passe aléatoire.
Voici le code :
def generer_mot_de_passe():
try:
# Récupérer la longueur saisie
longueur = int(entry_longueur.get())
if longueur < 4:
messagebox.showwarning("Erreur", "La longueur minimale est de 4 caractères.")
return
# Vérifier les options sélectionnées
inclure_majuscules = var_majuscules.get()
inclure_chiffres = var_chiffres.get()
inclure_speciaux = var_speciaux.get()
# Définir les caractères disponibles
caracteres = string.ascii_lowercase
if inclure_majuscules:
caracteres += string.ascii_uppercase
if inclure_chiffres:
caracteres += string.digits
if inclure_speciaux:
caracteres += string.punctuation
# Générer le mot de passe
mot_de_passe = []
if inclure_majuscules:
mot_de_passe.append(random.choice(string.ascii_uppercase))
if inclure_chiffres:
mot_de_passe.append(random.choice(string.digits))
if inclure_speciaux:
mot_de_passe.append(random.choice(string.punctuation))
# Compléter avec des caractères aléatoires
mot_de_passe += random.choices(caracteres, k=longueur - len(mot_de_passe))
random.shuffle(mot_de_passe)
mot_de_passe = ''.join(mot_de_passe)
# Afficher le mot de passe
entry_resultat.delete(0, tk.END)
entry_resultat.insert(0, mot_de_passe)
except ValueError:
messagebox.showerror("Erreur", "Veuillez entrer une longueur valide.")

3. Créer l’interface utilisateur
Tkinter permet de créer une interface graphique avec différents widgets. Voici les principales sections :
- Fenêtre principale : Configuration de la taille et du titre.
- Entrée de la longueur : Un champ texte pour saisir la longueur du mot de passe.
- Options : Cases à cocher pour inclure des majuscules, des chiffres, et des caractères spéciaux.
- Résultat : Un champ texte pour afficher le mot de passe généré.
Voici le code :
import tkinter as tk
from tkinter import messagebox
import random
import string
def generer_mot_de_passe():
"""
Génère un mot de passe aléatoire basé sur les options de l'utilisateur:
- longueur spécifiée,
- inclusion de majuscules, chiffres et caractères spéciaux.
La fonction garantit qu'au moins un caractère de chaque catégorie sélectionnée est présent,
puis complète le reste du mot de passe avec des caractères aléatoires tirés du pool total.
"""
try:
# Récupération et vérification de la longueur saisie
longueur = int(entry_longueur.get())
if longueur < 4:
messagebox.showwarning("Erreur", "La longueur minimale est de 4 caractères.")
return
# Récupération des options sélectionnées
inclure_majuscules = var_majuscules.get()
inclure_chiffres = var_chiffres.get()
inclure_speciaux = var_speciaux.get()
# Définition du pool initial de caractères (toujours en minuscules)
caracteres = string.ascii_lowercase
# Ajout des autres types de caractères selon les choix
if inclure_majuscules:
caracteres += string.ascii_uppercase
if inclure_chiffres:
caracteres += string.digits
if inclure_speciaux:
caracteres += string.punctuation
# Préparation de la liste pour garantir la présence d'au moins un caractère par catégorie choisie
mot_de_passe = []
if inclure_majuscules:
mot_de_passe.append(random.choice(string.ascii_uppercase))
if inclure_chiffres:
mot_de_passe.append(random.choice(string.digits))
if inclure_speciaux:
mot_de_passe.append(random.choice(string.punctuation))
# Vérification de la cohérence de la longueur demandée vs. le nombre minimum de caractères requis
if longueur < len(mot_de_passe):
messagebox.showwarning("Erreur", "La longueur est insuffisante pour inclure tous les types de caractères sélectionnés.")
return
# Ajout de caractères supplémentaires choisis aléatoirement dans le pool complet
mot_de_passe += random.choices(caracteres, k=longueur - len(mot_de_passe))
random.shuffle(mot_de_passe) # Mélange pour éviter que les caractères imposés soient toujours en début
mot_de_passe = ''.join(mot_de_passe)
# Affichage du mot de passe généré dans le champ de résultat
entry_resultat.delete(0, tk.END)
entry_resultat.insert(0, mot_de_passe)
except ValueError:
messagebox.showerror("Erreur", "Veuillez entrer une longueur valide.")
# Création de la fenêtre principale
fenetre = tk.Tk()
fenetre.title("Générateur de mots de passe")
fenetre.geometry("450x350")
fenetre.resizable(False, False)
# Titre de l'application
titre_label = tk.Label(fenetre, text="Générateur de mots de passe", font=("Arial", 16, "bold"))
titre_label.pack(pady=10)
# Section pour saisir la longueur du mot de passe
frame_longueur = tk.Frame(fenetre)
frame_longueur.pack(pady=5)
tk.Label(frame_longueur, text="Longueur du mot de passe :", font=("Arial", 12)).pack(side=tk.LEFT)
entry_longueur = tk.Entry(frame_longueur, width=5, font=("Arial", 12))
entry_longueur.pack(side=tk.LEFT, padx=5)
# Section des options (cases à cocher)
frame_options = tk.Frame(fenetre)
frame_options.pack(pady=10)
var_majuscules = tk.BooleanVar()
var_chiffres = tk.BooleanVar()
var_speciaux = tk.BooleanVar()
tk.Checkbutton(frame_options, text="Inclure des majuscules", variable=var_majuscules, font=("Arial", 12)).pack(anchor="w")
tk.Checkbutton(frame_options, text="Inclure des chiffres", variable=var_chiffres, font=("Arial", 12)).pack(anchor="w")
tk.Checkbutton(frame_options, text="Inclure des caractères spéciaux", variable=var_speciaux, font=("Arial", 12)).pack(anchor="w")
# Bouton pour générer le mot de passe
tk.Button(fenetre, text="Générer", command=generer_mot_de_passe, font=("Arial", 12), bg="green", fg="white").pack(pady=10)
# Section pour afficher le résultat
frame_resultat = tk.Frame(fenetre)
frame_resultat.pack(pady=5)
tk.Label(frame_resultat, text="Mot de passe généré :", font=("Arial", 12)).pack(side=tk.LEFT)
entry_resultat = tk.Entry(frame_resultat, width=30, font=("Arial", 12))
entry_resultat.pack(side=tk.LEFT, padx=5)
# Lancement de la boucle principale de l'interface
fenetre.mainloop()
Testons notre application en lançant la commande suivante:
python generateur_mdp.py
Voilà, notre programme est fin prêt. Je vous invite maintenant à l’améliorer à votre aise et à ajouter des fonctionnalités qui feraient de votre application un excellent programme de géneration de mot de passe.
On se retrouve dans les commentaires si vous avez des questions ou des avis.