☀️
420-1G2-HU Logique de programmation
  • 👋Bienvenue dans le cours de logique de programmation!
  • Bases de la logique de programmation
    • Concepts de la programmation
    • Les opérateurs
      • Exercices
    • Les commentaires
  • Les données
    • Les données et types simples
    • Les variables, les constantes et les opérations de base
    • Les opérations d'écriture et de lecture
    • Les opérations sur les chaînes de caractères
    • Laboratoire 1 - données
    • Laboratoire 2 - données
  • Les collections de données
    • Les listes
    • Les opérations sur les listes
    • Laboratoire listes - solution
    • Les dictionnaires
      • Exercices
  • Différents types de traitements
    • Structures logiques séquentielle
    • Structures logiques conditionnelles (if/else/elif)
    • Structures logiques répétitives (boucles)
      • Exercices de base
      • Laboratoire boucles - solution
  • Modularisation
    • Création et appels des fonctions
    • La documentation des fonctions
    • Annotation de types dans les fonctions
    • Laboratoire - fonctions (niveau débutant)
    • Révision express fonctions
    • Les modules
      • Laboratoire
  • La portée des variables
  • Débogage
    • 🫂Le débogueur, c'est ton ami!
      • Introductions aux outils de débogage
      • Techniques de débogage
    • Les erreurs et exceptions
      • Introduction aux notions d’erreurs
      • Les exceptions et leurs gestion
      • Exercices de base - avec solutions
      • Laboratoire débogage et gestion des erreurs -solution
  • Tests unitaires
    • Tests unitaires
    • Exercice
  • Cryptographie
    • Introduction à la cryptographie
  • Les fichiers
    • Accès aux fichiers
  • Résolution de problèmes
    • Résolution de problèmes : exercice introductif
    • Étapes d'analyse et de résolution de problèmes
  • Activités avec Légos
    • Introduction à la programmation
    • Consolidation sur les fonctions avec des blocs
    • Pratiquer les boucles avec des blocs
  • Laboratoires
    • Simulation combat - dragon vs chevalier
    • Simulateur de bataille - Les anneaux du pouvoir
    • Jeu de cartes
    • Lien logique mathématique
      • Algèbre de Boole
    • Crypto variée
    • Après Noël
  • git - système de gestion de versions
    • Introduction à Git
    • Étapes de création des dépôts Git
  • Classes inversées
    • Résolution de problèmes, fonctions et traitements conditionnels
  • Examens
    • Examen 2 - 2023
    • Examen 3 - 2023
    • Examen 2 - 2024
  • Révision
    • Fonctions, gestion d'erreurs et tests unitaires
    • Résolution de problème
  • Trucs utiles
    • Check-list
Powered by GitBook
On this page
  • Qu'est-ce que la cryptographie
  • Le chiffrement
  • Le chiffrement de César
  • Le hachage (hash)
  • Le module hashlib
  • Lien maths (optionnel)
  1. Cryptographie

Introduction à la cryptographie

Auteur : Bruno Charbonneau (adapté par Dalicia).

Qu'est-ce que la cryptographie

La cryptographie est une façon de protéger des informations et données à l'aide de différentes méthodes. Ces différentes méthodes ont toutes des forces de protection de l'information différentes.

Le chiffrement

Le chiffrement des données permet de transformer des données pour qu'elles soient déchiffrables seulement par la personne à qui elles sont destinées.

Exemples de formes de chiffrement :

  • Utiliser un langage secret.

  • Donner un code secret à un ami pour qu'il puisse lire un message qu'on a codifié.

Le chiffrement de César

Une méthode de chiffrement utilisée depuis longtemps est le chiffrement de César. Cette méthode porte ce nom car elle a été historiquement utilisée par Jules César pour transmettre des informations à ses généraux afin qu'elles ne puissent être lues que par ces derniers.

Algorithme

La méthode consiste à décaler toutes les lettres d'un mot ou d'un message d'un certain nombre de caractères dans l'alphabet.

César avait comme méthode de décaler tout de 3 lettres, mais ce chiffrement peut être utilisé avec n'importe quelle valeur de rotation vers la droite. Un algorithme populaire, nommé ROT13, consiste en fait à utiliser le chiffrement de César avec une valeur de rotation de 13.

Le chiffrement de César est considéré comme un chiffrement relativement faible car avec suffisamment d'essais de rotations on peut retrouver le mot ou message initial.

Exemple : Chiffrement de César avec un décalage de 3

Mot en claire "bonjour"

Mot chiffré "erqmrxu"

  • b décalé de 3 caractères vers la droite devient e

  • o décalé de 3 caractères vars la droite devient r

  • et ainsi de suite ...

Astuce

Il peut être plus simple de visualiser l'alphabet comme étant un tout circulaire, c'est à dire qu'après "z" on recommence à "a".

Le hachage (hash)

Le hachage fait également partie de la cryptographie et consiste à générer une séquence de caractères (appelée hash) pour remplacer les données à chiffrer. Il existe plusieurs algorithmes de hachage.

Exemple

Voici le résultat de différents algorithmes de hachage sur la phrase "Hello, World!"

Algorithme de hachage
Hash de "Hello, World!"

md5

65a8e27d8879283831b664bd8b7f0ad4

sha256

dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f

sha512

374d794a95cdcfd8b35993185fef9ba368f160d8daf432d08ba9f1ed1e5abe6cc69291e0fa2fe0006a52570ef18c19def4e617c33ce52ef0a6e5fbe318cb0387

Caractéristiques du hachage

  • Différents algorithmes de hachage produisent différents résultats pour les mêmes données.

  • Un algo de hachage produira toujours le même hash pour la même donnée en entrée.

  • Chaque algorithme créera un hash de la même longueur peu importe la taille des données initiales. Par exemple, la taille d'un hash md5 sera toujours de 32 caractères, que ce soit le hash d'un seul mot ou du texte complet d'un livre.

  • Un hash est irréversible : on ne peut pas retrouver les données initiales de façon algorithmique.

Collision : Bien qu'il soit rare, il est possible qu'un algorithme de hachage produise le même hash pour deux entrées différentes. Il s'agit d'une limitation théorique due à la nature finie de l'espace de sortie.

Exemple d'utilisation : Stocker les mots de passe dans les bases de données

À la création du mot de passe : Lorsqu'un utilisateur saisit son mot de passe en créant un compte, ce mot de passe est haché et sauvegardé dans la base de données.

À la vérification du mot de passe : Quand l'utilisateur veut ensuite s', il saisit à nouveau son mot de passe. Ce dernier est haché puis comparé au hash stocké dans la base de données. Si les deux hash correspondent, l'utilisateur est alors authentifié.

Le module hashlib

Le module hashlib est un module intégré au langage python. Il ne requiert pas l'installation d'un module externe et peut être tout simplement importé dans les fichiers python sans manipulation supplémentaire.

Une fois importé, on peut l'utiliser pour faire calculer les hash d'une chaîne de caractères voulue.

Important : Le hash se calcule sur les bytes (octet, représentation binaire) de la chaîne de caractères. Il faudra donc en faire la conversion pour que le calcul puisse se faire. Cela peut se faire de différentes façons.

# Au moment de la déclaration de la chaîne
chaine_en_bytes = b"Ceci sera converti en bytes"

# Conversion d'une variable
mot = "Bonjour"
mot_en_bytes = mot.encode() # Encodage en bytes (par défaut UTF-8)

Pour faire calculer un hash il suffit de spécifier quel type de hash on veut calculer via hashlib. Pour obtenir un format relativement lisible pour nous (et non une chaîne binaire) on utilisera hexdigest() pour convertir le tout en un chaîne de caractères hexadécimaux.

hash_md5 = hashlib.md5(b"allo").hexdigest()

Lien maths (optionnel)

Si vous souhaitez afficher votre chaîne de caractères en hexadécimal et en binaire (à partir d'un byte), voici le code :

chaine_en_bytes = b"Chaine en octets"

# Le format {byte:02X} convertit chaque byte en une chaîne de deux chiffres hexadécimaux (lettres en majuscules).
print("Représentation hexadécimale :", " ".join(f"{byte:02X}" for byte in chaine_en_bytes))

# Le format {byte:08b} convertit chaque byte en une chaîne de 8 bits.
print("Représentation binaire :", " ".join(f"{byte:08b}" for byte in chaine_en_bytes))
PreviousExerciceNextAccès aux fichiers

Last updated 6 months ago

hashlib Python 3.12