Présentatino du module hashlib
Le module hashlib en Python permet de calculer des valeurs de hachage cryptographiques. Il supporte plusieurs algorithmes courants comme MD5, SHA-1 et la famille SHA-2, offrant ainsi une solution intégrée pour le hachage sécurisé des données.
Algorithmes de hachage supportés
Les algoritmhes disponibles incluent :
- MD5 : produit une empreinte de 128 bits, souvent représentée en 32 caractères hexadécimaux.
- SHA-1 : génère une empreinte de 160 bits (40 caractères hexadécimaux), bien que considéré comme moins sécurisé aujourd'hui.
- SHA-224, SHA-256, SHA-384, SHA-512 : de la famille SHA-2, avec des longueurs d'empreinte respectives de 224, 256, 384 et 512 bits.
Exemple d'utilisation de MD5
Pour obtenir une empreinte MD5, on initialise un objet de hachage, on met à jour les données et on récupère le résultat hexadécimal.
import hashlib
def calculer_empreinte_md5(chaîne_entrée):
objet_hachage = hashlib.md5()
objet_hachage.update(chaîne_entrée.encode("utf-8"))
return objet_hachage.hexdigest()
texte = "666666"
empreinte = calculer_empreinte_md5(texte)
print(empreinte)
# Sortie : f379eaf3c831b04de153469d1bec345e
Attention : la méthode update requiert des données encodées en bytes. Passer une chaîne non encodée provoque une erreur TypeError.
Considérations de sécurité pour MD5
L'algorithme MD5 est unidirectionnel, donc impossible à inverser pour retrouver le texte original. Toutefois, sa vulnérabilité aux attaques par collision et aux tables arc-en-ciel le rend inapproprié pour le stockage de mots de passe. Il est recommandé d'utiliser des algorithmes plus robustes comme SHA-256, combinés avec des techniques de salage.
Renforcement avec le salage (salt)
Le salage consiste à ajouter une chaîne aléatoire (le sel) au mot de passe avant le hachage, empêchant ainsi que des mots de passe identiques produisent les mêmes empreintes. Le sel doit être de type bytes.
def hacher_avec_sel(sel, texte):
objet_hachage = hashlib.md5(sel)
objet_hachage.update(texte.encode("utf-8"))
return objet_hachage.hexdigest()
sel_statique = b'clé_aléatoire_ici'
valeur = "mot_de_passe"
empreinte_salée = hacher_avec_sel(sel_statique, valeur)
print(empreinte_salée)
Pour une sécurité accrue, le sel peut être dynamique, par exemple basé sur le nom d'utilisateur ou généré aléatoirement pour chaque compte.
Calcul de l'empreinte MD5 d'un fichier
On peut calculer l'empreinte d'un fichier pour vérifier son intégrité. Le fichier est lu en mode binaire, et le sel est optionnel.
def empreinte_fichier(chemin, sel=b''):
objet_hachage = hashlib.md5(sel)
with open(chemin, mode="rb") as fichier:
for ligne in fichier:
objet_hachage.update(ligne)
return objet_hachage.hexdigest()
empreinte = empreinte_fichier("document.txt", b"sel_facultatif")
print(empreinte)
L'empreinte MD5 sert à :
- Vérifier l'intégrité des fichiers lors de transferts.
- Confirmer que des téléchargements ne sont pas altérés.
- Dédoublonner des fichiers identiques dans des systèmes de stockage.
- Faciliter la distribution de logiciels en validant les fichiers sources.