Le hachage (hashing) est une opération cryptographique qui transforme une donnée de taille arbitraire en une empreinte de taille fixe, appelée hash ou digest. Cette transformation est unidirectionnelle : il est en pratique impossible de retrouver la donnée originale à partir du hash.
Une bonne fonction de hachage possède ces propriétés :
| Propriété | Description |
|---|---|
| Déterministe | La même entrée produit toujours le même hash |
| Résistance aux collisions | Deux entrées différentes ne doivent pas produire le même hash |
| Effet avalanche | Un changement minime de l'entrée modifie radicalement le hash |
| Irréversibilité | Impossible de retrouver l'entrée à partir du hash |
Exemple avec SHA-256 en Python :
import hashlib
password = "MonMotDePasse123"
hash_result = hashlib.sha256(password.encode()).hexdigest()
print(hash_result)
# → a3f5b6c8d9e2f1a4b7c0d3e6f9a2b5c8d1e4f7a0b3c6d9e2f5a8b1c4d7e0f3
Pour le stockage de mots de passe, les algorithmes classiques (MD5, SHA-256) sont insuffisants car trop rapides. On utilise des fonctions spécialisées comme bcrypt, scrypt ou Argon2 qui intègrent un sel (salt) et un facteur de coût réglable :
import bcrypt
password = b"MonMotDePasse123"
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
À retenir
Un bon hachage ne compense pas un mot de passe faible. Même avec Argon2, un mot de passe trivial sera retrouvé par attaque par dictionnaire. Commencez par générer un mot de passe robuste avant de le hacher.
Termes connexes : sel (salt), bcrypt, Argon2, SHA-256, attaque par force brute.
