Création d’un générateur de mots de passe avec Tkinter

Création d’un générateur de mots de passe avec Tkinter

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.

  • 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.

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

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.")

Tkinter permet de créer une interface graphique avec différents widgets. Voici les principales sections :

  1. Fenêtre principale : Configuration de la taille et du titre.
  2. Entrée de la longueur : Un champ texte pour saisir la longueur du mot de passe.
  3. Options : Cases à cocher pour inclure des majuscules, des chiffres, et des caractères spéciaux.
  4. 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()


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.

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *