Algorithmes & Programmation Structurée
avec Python II
RAPPORT DE TRAVAIL
Presenté par :
AWIZOBA Geoffroy Essohanim
FILIERES
CYBERSECURITE
PROMOTION
Licence Cours Du Jour 2024-2025
SOMMAIRE
1. Introduction
2. La fenêtre d’ Authentification
3. La fenêtre de dashboard .
4. Liaison des deux fenêtre.
5. Conclusion.
1. Introduction
Voici un rapport détaillé, étape par étape, expliquant le fonctionnement de chaque bloc
de code des deux fichiers [Link] et [Link] afin que tu puisses bien comprendre le
processus global.
2. La fenêtre d’ Authentification
Voici le code de présentation de la fenêtre d’ authentification .
#Nom : AWIZOBA
#Prenom : Geoffroy
#Date : 09/05/2025
#Code : La page d' authentification
import tkinter as tk
from tkinter import messagebox
import random
import [Link] as tkFont
import subprocess
# À mettre à la place de [Link] dans ton code de connexion réussie :
# Identifiants valides
USERNAME = "admin"
PASSWORD = "admin"
# Générer un captcha simple (addition)
def generer_captcha():
global captcha_reponse
a = [Link](1, 10)
b = [Link](1, 10)
captcha_reponse = str(a + b)
label_captcha.config(text=f"Combien font {a} + {b} ?")
# Vérifier les identifiants et le captcha
def verifier_connexion():
nom_utilisateur = entry_utilisateur.get()
mot_de_passe = entry_mot_de_passe.get()
reponse_captcha = entry_captcha.get()
if nom_utilisateur == USERNAME and mot_de_passe == PASSWORD:
if reponse_captcha == captcha_reponse:
[Link]("Succès", "Connexion réussie !")
[Link]()
[Link](["python", "[Link]"])
else:
[Link]("Erreur", "Captcha incorrect.")
generer_captcha()
else:
[Link]("Erreur", "Nom d'utilisateur ou mot de passe
incorrect.")
generer_captcha()
# Création de la fenêtre
fenetre = [Link]()
[Link]("Authentification")
[Link]("300x300")
[Link](False, False)
[Link](bg="lightblue")
default_font = [Link]("TkDefaultFont")
default_font.configure(family="Arial", size=10)
# Widgets
[Link](fenetre, text="Nom d'utilisateur :").pack(pady=5)
entry_utilisateur = [Link](fenetre)
entry_utilisateur.pack(pady=5)
[Link](fenetre, text="Mot de passe :").pack(pady=5)
entry_mot_de_passe = [Link](fenetre, show="*")
entry_mot_de_passe.pack(pady=5)
label_captcha = [Link](fenetre, text="")
label_captcha.pack(pady=10)
entry_captcha = [Link](fenetre)
entry_captcha.pack(pady=5)
[Link](fenetre, text="Se connecter", command=verifier_connexion).pack(pady=20)
# Lancer le captcha au démarrage
generer_captcha()
# Lancer la boucle principale
[Link]()
Explication de ce code
Les importation :
import tkinter as tk
from tkinter import messagebox
import random
import [Link] as tkFont
import subprocess
La creation de la fentre
# Création de la fenêtre
fenetre = [Link]()
[Link]("Authentification")
[Link]("300x300")
[Link](False, False)
[Link](bg="lightblue")
default_font = [Link]("TkDefaultFont")
default_font.configure(family="Arial", size=10)
Cette partie du code nous permet de créer la fenêtre d’ authentification de lui assigner une
taille de base avec la fonction geometry ici nous avons assigner 300 px sur 300 px , nous n’
avons pas autoriser le redimensionnement de notre fenêtre ajoutant a la fonction resizable
les paramtre (false , false) . de plus nous avons ajouter une police d’ ecriture (Arial) avec
notre module tkinter font que nous avons importer en de but de code, nous avons aussi
ajouter une couleur de background en bleu.
Les widgets
# Widgets
[Link](fenetre, text="Nom d'utilisateur :").pack(pady=5)
entry_utilisateur = [Link](fenetre)
entry_utilisateur.pack(pady=5)
[Link](fenetre, text="Mot de passe :").pack(pady=5)
entry_mot_de_passe = [Link](fenetre, show="*")
entry_mot_de_passe.pack(pady=5)
label_captcha = [Link](fenetre, text="")
label_captcha.pack(pady=10)
entry_captcha = [Link](fenetre)
entry_captcha.pack(pady=5)
[Link](fenetre, text="Se connecter", command=verifier_connexion).pack(pady=2)
Nous avons créer nos different widgets et les avons organiser sur la fentre principale en
utilisant la fonction packs nos wigets utiliser son les Labels pour du texte et les Entry pour
nos champs de saisi , l’ utilisateur doit saisir ses information de login dans ses different
champs. Le Button nous permet d’ envoyer toutes ces infos pour verification.
La fonction de verification
# Vérifier les identifiants et le captcha
def verifier_connexion():
nom_utilisateur = entry_utilisateur.get()
mot_de_passe = entry_mot_de_passe.get()
reponse_captcha = entry_captcha.get()
if nom_utilisateur == USERNAME and mot_de_passe == PASSWORD:
if reponse_captcha == captcha_reponse:
[Link]("Succès", "Connexion réussie !")
[Link]()
[Link](["python", "[Link]"])
else:
[Link]("Erreur", "Captcha incorrect.")
generer_captcha()
else:
[Link]("Erreur", "Nom d'utilisateur ou mot de passe
incorrect.")
generer_captcha()
Donc ici nous avons la fonction de verification des identifiant entrer en cas de reussite nous
affichons un message box de type info pour informer au user de la reussite en cas d’ echec
nous l’ informons de la defaite . En cas de succés un autre processus commence la fentre
actuelle (la fentre d’ authentification) et il ya ouverture de la deuxieme fentre le
[Link] cela est possible grace a notre importation de module subprocess ce module
nous permet de lancer un programme python depuis un autre ce qui est fait ici grace a la
reussite de notre authentification on fait appel a l’ execution de notre fichier dashboard
J’ ai aussi créer un système de captcha simple avec le module random il nous demande
juste de faire un petit calcul.
Voici le code du captcha
def generer_captcha():
global captcha_reponse
a = [Link](1, 10)
b = [Link](1, 10)
captcha_reponse = str(a + b)
label_captcha.config(text=f"Combien font {a} + {b} ?")
Je précise que dans mon TP le username est admin et me password admin .
Apercu de notre exécution
1-
2-
3- La fenetre de dashborad
Voici le code de cette fenetre :
#Nom : AWIZOBA
#Prenom : Geoffroy
#Date : 09/05/2025
#Code : La page de dahboard
import tkinter as tk
from tkinter import messagebox, filedialog
import base64
import os
def convertir_et_sauvegarder():
mot_ascii = entry_ascii.get()
if not mot_ascii:
[Link]("Champ vide", "Veuillez entrer un mot de passe en
ASCII.")
return
try:
mot_base64 = base64.b64encode(mot_ascii.encode()).decode()
output_text.delete("1.0", [Link])
output_text.insert([Link], mot_base64)
# Sauvegarder dans un fichier
nom_fichier = [Link](defaultextension=".txt",
filetypes=[("Fichiers texte", "*.txt")])
if nom_fichier:
with open(nom_fichier, "w") as fichier:
[Link](mot_base64)
[Link]("Succès", f"Fichier enregistré :\n{nom_fichier}")
# Ouvre le dossier contenant le fichier
[Link]([Link](nom_fichier)) # Windows
# Pour Linux/macOS, remplacer par : [Link](f'xdg-open
"{[Link](nom_fichier)}"')
except Exception as e:
[Link]("Erreur", str(e))
# Interface Dashboard
fenetre = [Link]()
[Link]("Dashboard - Encodeur Base64")
[Link]("400x300")
[Link](bg="#e6f0ff")
[Link](fenetre, text="Entrez le mot de passe ASCII :", bg="#e6f0ff",
font=("Arial", 10)).pack(pady=10)
entry_ascii = [Link](fenetre, width=40, font=("Arial", 10))
entry_ascii.pack(pady=5)
[Link](fenetre, text="Convertir et Enregistrer",
command=convertir_et_sauvegarder,
bg="#4da6ff", fg="white", font=("Arial", 10, "bold")).pack(pady=10)
[Link](fenetre, text="Résultat Base64 :", bg="#e6f0ff", font=("Arial",
10)).pack(pady=5)
output_text = [Link](fenetre, height=4, width=45, font=("Courier", 10))
output_text.pack(pady=5)
[Link]()
Explication du code
Cette fenetre est un dashboard qui nous permet de convertir du texte en base64 il utilisase
donc un algorithme de chiffrage.
fenetre = [Link]()
[Link]("Dashboard - Encodeur Base64")
[Link]("400x300")
[Link](bg="#e6f0ff")
[Link](fenetre, text="Entrez le mot de passe ASCII :", bg="#e6f0ff",
font=("Arial", 10)).pack(pady=10)
entry_ascii = [Link](fenetre, width=40, font=("Arial", 10))
entry_ascii.pack(pady=5)
[Link](fenetre, text="Convertir et Enregistrer",
command=convertir_et_sauvegarder,
bg="#4da6ff", fg="white", font=("Arial", 10, "bold")).pack(pady=10)
[Link](fenetre, text="Résultat Base64 :", bg="#e6f0ff", font=("Arial",
10)).pack(pady=5)
output_text = [Link](fenetre, height=4, width=45, font=("Courier", 10))
output_text.pack(pady=5)
[Link]()
Nous avons créer ici notre fenetre comme d’ habitude avec un title une taille fixe de 400px
sur 300 px . nous avons utiliser tois champs labels pour nos texte . on a aussi utiser un
Entry pour la saisi du password a concertir en base 64. Le trisieme champs label pour
afficher notre conversion , un widget Button qui lancer l’ action de conversion son
paramettre commande fait appel a la fonction convertir_et_suvegarder.
La fonction convertir_et_sauvegarder
def convertir_et_sauvegarder():
mot_ascii = entry_ascii.get()
if not mot_ascii:
[Link]("Champ vide", "Veuillez entrer un mot de passe en
ASCII.")
return
try:
mot_base64 = base64.b64encode(mot_ascii.encode()).decode()
output_text.delete("1.0", [Link])
output_text.insert([Link], mot_base64)
# Sauvegarder dans un fichier
nom_fichier = [Link](defaultextension=".txt",
filetypes=[("Fichiers texte", "*.txt")])
if nom_fichier:
with open(nom_fichier, "w") as fichier:
[Link](mot_base64)
[Link]("Succès", f"Fichier enregistré :\n{nom_fichier}")
# Ouvre le dossier contenant le fichier
[Link]([Link](nom_fichier)) # Windows
# Pour Linux/macOS, remplacer par : [Link](f'xdg-open
"{[Link](nom_fichier)}"')
except Exception as e:
[Link]("Erreur", str(e))
cette fonction nous permet de convertir en base 64 via l’ importation du module base64 et
nous permet d’ enregistrer le resultat dans un fichier txt sauvegardable via le module os de
python on interagit avec l’ utisateur avec le filedialog.
import tkinter as tk
from tkinter import messagebox, filedialog
import base64
import os
3-Liaison des deux fenêtre.
La liaison des deux fentre a été rendu possible grace au module subprocess de python. Les
deux fichier on été mis dans un méme dossier.
4-Conclusion.
Ce TP m’a permis de créer une application Tkinter avec une authentification sécurisée
suivie d’un dashboard fonctionnel. J’ai eu a manipulé des modules essentiels comme
tkinter, base64 et subproces