Documentation développeur
Python
Mis à jour le 18 septembre 2026

Hachage cryptographique en Python (SHA-256)

Calculez des empreintes SHA-256, SHA-512 et MD5 en Python avec le module natif hashlib et le traitement par flux de fichiers.

La bibliothèque standard de Python comprend le module hashlib, qui s'interface avec OpenSSL pour offrir des fonctions de hachage cryptographique accélérées par le matériel.

Démarrage rapide#

Calculez l'empreinte SHA-256 d'une chaîne de caractères :

Python
1import hashlib23# 1. Encodage des chaînes en octets UTF-84donnees = "ToolPorta Secure Payload".encode("utf-8")56# 2. Calcul du condensat7empreinte = hashlib.sha256(donnees).hexdigest()89print(empreinte)10# Résultat : "ebaaafbb17fa16f0be7ab74c04e07c985bf0913468f82bb8d95627ee83a1a7f2"

Formats et Représentations#

L'objet de hachage permet de récupérer l'empreinte sous forme binaire ou hexadécimale :

Python
1import hashlib23h = hashlib.sha256(b"Bonjour ToolPorta")45# Chaîne hexadécimale de 64 caractères6hex_str = h.hexdigest()7print("Hex :", hex_str)89# 32 octets binaires10octets = h.digest()11print("Taille :", len(octets))  # 32

Hacher de gros fichiers par blocs#

Pour hacher des fichiers volumineux sans saturer la mémoire vive, traitez le fichier par blocs de 64 Ko :

Python
1import hashlib2from pathlib import Path34def hacher_fichier(chemin: str | Path, algorithme: str = "sha256") -> str:5    hasher = hashlib.new(algorithme)6    taille_bloc =   # Blocs de 64 Ko78    with open(chemin, "rb") as f:9        while bloc := f.read(taille_bloc):10            hasher.update(bloc)1112    return hasher.hexdigest()

Signatures HMAC et Authentification#

Pour générer des codes d'authentification de message avec clé secrète (webhooks ou API), utilisez hmac :

Python
1import hmac2import hashlib34cle_secrete = b"cle-secrete-api"5charge_utile = b'{"statut":"ok"}'67# Signature HMAC-SHA2568signature = hmac.new(cle_secrete, charge_utile, hashlib.sha256).hexdigest()9print("Signature HMAC :", signature)1011# Comparaison sécurisée contre les attaques temporelles avec la signature attendue12signature_attendue = signature  # Provient généralement d'un en-tête de requête HTTP13valide = hmac.compare_digest(signature, signature_attendue)14print("Valide :", valide)

Bonnes pratiques#

  1. Utilisez hmac.compare_digest() : Empêche les attaques par canal auxiliaire (timing attacks) lors de la comparaison des signatures.
  2. Encodez systématiquement en UTF-8 : Spécifiez chaine.encode("utf-8") pour éviter les incohérences d'encodage selon le système hôte.
  3. Distinguez les usages :
    • Hachage cryptographique : Utilisez SHA-256 ou SHA-512 (hashlib.sha256()).
    • Hachage haute performance : Utilisez hashlib.blake2b(), cryptographiquement sûr et plus rapide que SHA-256.
    • Mots de passe : N'utilisez jamais de hachage simple direct ; préférez des algorithmes dédiés avec sel et coût (Argon2, bcrypt, ou hashlib.scrypt()).

Références#

Implémenter Hashing dans d'autres langages :