Le module hashlib de Python - Fonctionnalités de cryptage

Le module hashlib

Le module hashlib est une bibliothèque Python intégrée qui fournit des fonctions de hachage sécurisées pour divers algorithmes de cryptage.

Notions fondamentales sur le hachage

Le hachage consiste à transformer une donnée en entrée (appelée "texte clair") en une séquence de caractères de longueur fixe (appelée "texte chiffré"). Cette transformation est conçue pour être unidirectionnelle, ce qui signifie qu'il est pratiquement impossible de déduire le texte original à partir du texte chiffré.

Domainse d'application

Le cryptage est largement utilisé pour la vérification de mots de passe et la sécurité des données. Lors de la transmission de mots de passe sur un réseau, ils peuvent être interceptés. En chiffrant les mots de passe avant transmission, nous augmentons considérablement la sécurité, car même si le texte chiffré est intercepté, il ne peut pas être facilement déchiffré.

Une autre application importante est la détection de l'intégrité des fichiers. Nous pouvons utiliser des algorithmes de hachage pour vérifier si un fichier a été modifié ou corrompu, en comparant le haché du fichier avant et après sa transmission ou son stockage.

Algorithmes de cryptage courants

Les algorithmes de cryptage les plus courants incluent MD5, SHA-1, SHA-256, SHA-512, HMAC et Base64. Chacun de ces algorithmes possède des caractéristiques différentes en termes de sécurité et de performance.

Utilisation du module hashlib

Fonctionnalités de base


import hashlib

# Créer un objet de hachage avec l'algorithme MD5
hacheur = hashlib.md5()

# Mettre à jour l'objet avec le texte à hacher (encodé en binaire)
hacheur.update('Voici un texte à hacher'.encode('utf-8'))

# Obtenir le texte chiffré en hexadécimal
texte_chiffre = hacheur.hexdigest()
print(texte_chiffre)  # Affiche le texte chiffré

Remarques supplémentaires

Il est important de noter que le même texte d'entrée produira toujours le même texte chiffré avec un algorithme donné. Cependant, il est impossible de déduire le texte original à partir du texte chiffré. De plus, la longueur du texte chiffré est toujours fixe pour un algorithme donné.

Le module hashlib permet également de mettre à jour l'objet de hachage par morceaux, ce qui est utile pour les grands fichiers ou les flux de données :


hacheur = hashlib.md5()
# Mettre à jour par segments
hacheur.update('Premier segment'.encode('utf-8'))
hacheur.update('Deuxième segment'.encode('utf-8'))
hacheur.update('Dernier segment'.encode('utf-8'))
texte_chiffre = hacheur.hexdigest()
print(texte_chiffre)  # Le résultat est identique au hachage complet

Technique du "sel" (Salting)

Une faiblesse potentielle des algorithmes de hachage simples est que deux textes identiques produiront toujours le même haché. Cela peut être exploité dans des attaques par "rainbow table", où des attaquants comparent des hachés connus à leurs valeurs correspondantes.

Pour renforcer la sécurité, nous pouvons ajouter un "sel" - une donnée aléatoire supplémentaire - avant le hachage :


import hashlib

hacheur = hashlib.md5()

# Ajouter du "sel" avant et après le texte
hacheur.update('Sel_prefixe_aleatoire'.encode('utf-8'))
hacheur.update('mot_de_passe'.encode('utf-8'))
hacheur.update('Sel_suffixe_aleatoire'.encode('utf-8'))

texte_chiffre = hacheur.hexdigest()

Dans une application réelle, le "sel" peut être stocké avec le haché dans la base de données. Lors de la vérification d'un mot de passe, le même "sel" est appliqué avant le hachage.

Sel dynamique

Pour une sécurité encore plus élevée, nous pouvons utiliser un "sel" dynamique qui varie pour chaque utilisateur :


import hashlib
nom_utilisateur = input('Nom d\'utilisateur>>:').strip()
mot_de_passe = input('Mot de passe>>:').strip()

hacheur = hashlib.md5()

# Utiliser une partie du nom d'utilisateur comme sel
hacheur.update(nom_utilisateur[::3].encode('utf-8'))
hacheur.update(mot_de_passe.encode('utf-8'))

texte_chiffre = hacheur.hexdigest()
print(texte_chiffre)

Vérification de l'intégrité des fichiers

Lors du transfert de fichiers via un réseau, il est essentiel de s'assurer que le fichier n'a pas été altéré. Nous pouvons utiliser le hachage pour vérifier l'intégrité du fichier :

  1. Calculer le haché du fichier avant son transfert
  2. Envoyer le fichier et son haché
  3. Après réception, recalculer le haché du fichier reçu
  4. Comparer les deux hachés - s'ils correspondent, le fichier est intact

Pour les fichiers volumineux, il est plus efficace de ne hacher que certaines parties du fichier (par exemple, le début, la fin et quelques segments au milieu) plutôt que l'intégralité du fichier. Cette approche réduit considérablement les ressources nécessaires tout en maintenant une bonne détection des modifications.

Étiquettes: Python hashlib cryptage Sécurité hachage

Publié le 8 juin à 03h55