Seb-Info

Introduction à l’interface graphique avec Tkinter en Python

Introduction à l’interface graphique avec Tkinter en Python

Objectifs :

  • Comprendre les bases de l’interface graphique avec Python et Tkinter.
  • Créer des interfaces simples et fonctionnelles.
  • Manipuler les principaux widgets de Tkinter (labels, boutons, champs de texte, etc.).
  • Gérer les événements et interactions utilisateur.

1. Introduction à Tkinter

Tkinter est la bibliothèque standard pour créer des interfaces graphiques avec Python.
Elle permet de créer des fenêtres, des boutons, des champs de texte, et autres composants graphiques interactifs.

Installation et utilisation de base :

import tkinter as tk

# Création de la fenêtre principale
root = tk.Tk()
root.title("Ma première fenêtre Tkinter")
root.geometry("400x300")  # Taille de la fenêtre

# Lancement de la boucle principale
root.mainloop()

Explications :

  • Tk() : Crée la fenêtre principale.
  • title() : Définit le titre de la fenêtre.
  • geometry() : Définit la taille de la fenêtre (largeur x hauteur).
  • mainloop() : Lancement de la boucle d’événements pour maintenir la fenêtre ouverte.

2. Création d’une interface simple et gestion d’un évènement

Widgets de base :

  • Label : Affiche un texte statique.
  • Button : Crée un bouton cliquable.
  • Entry : Champ de saisie de texte.
import tkinter as tk

# Création de la fenêtre principale
root = tk.Tk()
root.title("Exemple d'interface simple")
root.geometry("400x300")

# Création d'un label
label = tk.Label(root, text="Bienvenue dans Tkinter !")
label.pack(pady=10)

# Création d'un champ de texte (Entry)
entry = tk.Entry(root, width=30)
entry.pack(pady=10)

# Fonction appelée lors du clic sur le bouton
def on_button_click():
    entered_text = entry.get()
    label.config(text=f"Bonjour, {entered_text} !")

# Création d'un bouton
button = tk.Button(root, text="Valider", command=on_button_click)
button.pack(pady=10)

# Lancement de la boucle principale
root.mainloop()

Explications :

  • Label() : Crée un texte statique affiché dans la fenêtre.
  • Entry() : Crée un champ de saisie où l’utilisateur peut entrer du texte.
  • Button() : Crée un bouton cliquable. L’argument command permet de lier le bouton à une fonction.

3. Exercices pratiques

Exercice 1 : Calculatrice basique

Créer une calculatrice simple avec des boutons pour les chiffres et les opérations de base (addition, soustraction, etc.).

Voici un début de code :

import tkinter as tk

def calculer():
    try:
        expression = entry.get()
        result = eval(expression)
        result_label.config(text=f"Résultat : {result}")
    except Exception as e:
        result_label.config(text="Erreur")

root = tk.Tk()
root.title("Calculatrice")

entry = tk.Entry(root, width=30)
entry.pack(pady=10)

button_calculer = tk.Button(root, text="Calculer", command=calculer)
button_calculer.pack(pady=10)

result_label = tk.Label(root, text="")
result_label.pack(pady=10)

root.mainloop()
Correction

Exercice 2 : To-do list

Créer une application de gestion de tâches où l’utilisateur peut ajouter et supprimer des tâches.

  • Créez un champ pour entrer une nouvelle tâche.
  • Ajoutez un bouton « Ajouter » qui ajoute la tâche à une liste affichée dans la fenêtre.
  • Ajoutez un bouton « Supprimer » qui permet de supprimer une tâche sélectionnée.

Chiffrement AES

Exercice 3 : Gestion de mots de passe

TAF: Créer une interface où l’utilisateur entre un mot de passe, le chiffre et peut ensuite le déchiffrer.

  • Créez un champ pour entrer un mot de passe.
  • Ajoutez un bouton pour chiffrer le mot de passe.
  • Ajoutez un autre champ pour entrer le mot de passe chiffré et un bouton pour le déchiffrer.

Objectif

Dans cet exercice, nous allons utiliser la bibliothèque cryptography pour chiffrer et déchiffrer un mot de passe de manière sécurisée. Nous utiliserons également Tkinter pour créer une interface graphique simple.

Installation de la bibliothèque cryptography

Pour commencer, installez la bibliothèque cryptography avec la commande suivante :

pip install cryptography

Chiffrement et déchiffrement avec cryptography

Nous utiliserons l’algorithme de chiffrement symétrique Fernet, qui garantit la confidentialité et l’intégrité des données. Voici un exemple de code pour chiffrer et déchiffrer un mot de passe :

Exemple de chiffrement


from cryptography.fernet import Fernet

# Générer une clé de chiffrement
key = Fernet.generate_key()
cipher_suite = Fernet(key)


# Fonction pour chiffrer un mot de passe
def chiffrer_mot_de_passe(mot_de_passe):
    mot_de_passe_bytes = mot_de_passe.encode('utf-8')  # Convertir en bytes
    mot_de_passe_chiffre = cipher_suite.encrypt(mot_de_passe_bytes)  # Chiffrement
    return mot_de_passe_chiffre.decode('utf-8')
    

Exemple de déchiffrement


# Fonction pour déchiffrer un mot de passe
def dechiffrer_mot_de_passe(mot_de_passe_chiffre):
    mot_de_passe_chiffre_bytes = mot_de_passe_chiffre.encode('utf-8')  # Convertir en bytes
    mot_de_passe_dechiffre = cipher_suite.decrypt(mot_de_passe_chiffre_bytes)  # Déchiffrement
    return mot_de_passe_dechiffre.decode('utf-8')
    

key = Fernet.generate_key()

  • Qu’est-ce que Fernet ?
    Fernet est un système de chiffrement symétrique, ce qui signifie que la même clé est utilisée à la fois pour chiffrer et déchiffrer les données. Fernet assure la confidentialité (personne ne peut lire le message sans la clé) et l’intégrité (le message n’a pas été modifié).
  • Génération d’une clé symétrique :
    La méthode generate_key() génère une clé de chiffrement de manière aléatoire. Cette clé est une chaîne d’octets (bytes) de 32 caractères, encodée en base64, et elle est essentielle pour chiffrer et déchiffrer des données.

La base64

cipher_suite = Fernet(key)

  • Initialisation de l’algorithme Fernet :
    Fernet(key) crée une instance de la classe Fernet en utilisant la clé générée précédemment. Cet objet, ici appelé cipher_suite, est ce qui permet d’effectuer les opérations de chiffrement et de déchiffrement.

L’algorithme Fernet garantit non seulement la confidentialité (en rendant les données illisibles sans la clé), mais aussi l’intégrité (en s’assurant que les données n’ont pas été modifiées pendant leur transit ou stockage). Cela est rendu possible grâce à l’utilisation combinée du chiffrement symétrique et des HMAC (Hashed Message Authentication Codes).

Comment Fernet garantit l’intégrité des données ?

  1. Chiffrement symétrique avec une clé secrète :
    • Confidentialité : Les données sont chiffrées avec l’algorithme AES (Advanced Encryption Standard) en mode CBC (Cipher Block Chaining), qui assure que le contenu est sécurisé et illisible sans la clé secrète.
  2. Ajout d’un HMAC (Hashed Message Authentication Code) :
    • Intégrité : Lorsqu’un message est chiffré avec Fernet, il n’est pas seulement chiffré avec AES, mais un HMAC est également généré sur le message chiffré. Un HMAC est une signature cryptographique qui assure que le message n’a pas été altéré.

Exercice 4 : Comprendre la structure du message Fernet

Le HMAC (Hashed Message Authentication Code) généré par Fernet est intégré dans le message chiffré, mais il n’est pas exposé directement. Toutefois, nous pouvons décomposer le message chiffré pour voir comment il est structuré, ce qui inclut l’HMAC.

Structure du message Fernet

Le message chiffré par Fernet a la structure suivante :

  1. Version (1 byte) : indique la version du protocole Fernet.
  2. Horodatage (8 bytes) : un horodatage Unix en secondes (nombre de secondes écoulées depuis le 1er janvier 1970).
  3. IV (16 bytes) : vecteur d’initialisation pour l’algorithme de chiffrement AES en mode CBC.
  4. Données chiffrées : le texte chiffré.
  5. HMAC (32 bytes) : code HMAC-SHA256 calculé sur toutes les données précédentes (version, horodatage, IV et données chiffrées).

Le tout est encodé en base64 pour être retourné sous forme de chaîne de caractères.

TAF : Décomposer un message Fernet pour voir le HMAC

Correction :

https://github.com/SebInfo/chiffrementFernet

Ce contenu est réservé aux membres du site. Si vous êtes un utilisateur existant, veuillez vous connecter. Les nouveaux utilisateurs peuvent s'inscrire ci-dessous.

Connexion pour les utilisateurs enregistrés
   
Nouvel utilisateur ?
*Champ requis
Powered by WP-Members