MD5 vs SHA-256 : différences et recommandations
MD5 et SHA-256 sont deux fonctions de hachage cryptographique. Elles produisent une empreinte de taille fixe à partir d'une entrée de taille arbitraire. On les rencontre partout : vérification d'intégrité de fichiers, signatures, identifiants uniques, certificats TLS, blockchain. Leur statut sécuritaire est en revanche très différent : MD5 est cassé depuis 2004 pour les usages cryptographiques, SHA-256 reste sûr en 2026. Cet article fait le point.
Rappel sur les fonctions de hachage
Une fonction de hachage cryptographique transforme un message de longueur quelconque en une empreinte de taille fixe. Trois propriétés attendues :
- Résistance à la préimage : étant donné un hash, il doit être infaisable de retrouver le message d'origine.
- Résistance à la seconde préimage : étant donné un message, il doit être infaisable d'en trouver un autre qui produise le même hash.
- Résistance aux collisions : il doit être infaisable de trouver deux messages distincts qui produisent le même hash.
Une fonction est dite cassée dès qu'une de ces propriétés tombe. Pour MD5, la résistance aux collisions est tombée en 2004.
MD5 : 128 bits, cassé depuis 2004
MD5 (Message Digest 5) est une fonction conçue par Ronald Rivest en 1991 et standardisée par RFC 1321. Elle produit une empreinte de 128 bits (16 octets, 32 caractères hexadécimaux).
En 2004, Wang et Yu publient une attaque qui produit des collisions MD5 en quelques heures sur un PC. Depuis, le coût de génération d'une collision est tombé à quelques secondes. En 2008, des chercheurs ont fabriqué un faux certificat SSL signé MD5 reconnu valide par tous les navigateurs. En 2012, le malware Flame utilisait une collision MD5 pour signer son exécutable comme un binaire Microsoft légitime.
Conclusion : MD5 ne doit plus servir dès qu'un attaquant peut influencer l'entrée. Tous les usages cryptographiques (signatures, intégrité face à un adversaire, dérivation de clé) sont exclus. Seuls quelques usages sans hostilité restent acceptables, comme un checksum de transfert réseau ou une clé de cache : MD5 reste rapide, et la collision involontaire reste statistiquement impossible.
SHA-256 : 256 bits, sûr en 2026
SHA-256 appartient à la famille SHA-2 publiée par le NIST en 2001 et standardisée par FIPS 180-4. Elle produit une empreinte de 256 bits (32 octets, 64 caractères hexadécimaux).
Aucune attaque pratique n'est connue contre SHA-256. La meilleure attaque théorique sur les collisions concerne 31 tours sur 64, sans implication pratique. Le coût de force brute pour trouver une collision est de l'ordre de 2^128 opérations, hors de portée de toute infrastructure connue.
SHA-256 est utilisé dans : TLS (certificats X.509), Git (depuis SHA-256 transition), Bitcoin (preuve de travail), signatures de paquets Linux, Windows Update, etc. C'est aujourd'hui le hash par défaut recommandé pour la majorité des usages cryptographiques généraux.
Différences pratiques
Longueur de sortie
MD5("hello") = 5d41402abc4b2a76b9719d911017c592 (32 chars hex)
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 chars hex)
Vitesse
MD5 est environ 2 à 3 fois plus rapide que SHA-256 sur la même machine. Sur un CPU moderne, MD5 traite plusieurs Go/s par cur, SHA-256 est de l'ordre du Go/s. Sur les CPU récents avec extension SHA-NI, l'écart se réduit fortement.
Sécurité
C'est la seule différence qui compte vraiment : MD5 est cassé pour les collisions, SHA-256 ne l'est pas. Si la sécurité face à un adversaire est en jeu, le choix est tranché.
Tableau comparatif
| Critère | MD5 | SHA-256 |
|---|---|---|
| Année | 1991 | 2001 |
| Taille de sortie | 128 bits / 32 hex | 256 bits / 64 hex |
| Résistance aux collisions | Cassée depuis 2004 | Pas d'attaque pratique |
| Vitesse relative | 2 à 3 fois plus rapide | Référence |
| Accélération matérielle | Aucune dédiée | SHA-NI sur CPU récents |
| Usage cryptographique | Déconseillé | Recommandé |
| Usage intégrité non hostile | Acceptable | Recommandé |
| Conformité réglementaire | Refusée (PCI-DSS, FIPS) | Acceptée |
Cas d'usage
Quand MD5 reste acceptable
- Clé de cache applicatif (Redis, memcached) sans implication sécurité
- Détection de doublons dans un dataset non hostile
- Checksum d'un transfert réseau pour détecter une corruption accidentelle
- Empreinte d'une chaîne pour répartition (sharding) sans contrainte adversariale
Quand SHA-256 s'impose
- Vérification d'intégrité face à un attaquant (downloads signés, packages)
- Signatures numériques, certificats X.509
- Identifiants Git de commits et objets
- Dérivation de clés (en combinaison avec HKDF)
- Toute application soumise à une exigence réglementaire (PCI-DSS, ANSSI, FIPS)
Exemples concrets
En PHP, les deux fonctions sont disponibles via la fonction hash() :
// Empreinte d'une chaine
$md5 = hash('md5', 'hello world');
$sha256 = hash('sha256', 'hello world');
// Empreinte d'un fichier (lecture en streaming)
$md5File = hash_file('md5', '/path/to/file.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');
Vous pouvez générer ces empreintes directement en ligne avec notre générateur de hash texte, hasher un fichier avec le générateur de hash de fichier, ou identifier un type de hash inconnu avec l'identifieur de hash.
Recommandation
La règle 2026 est simple : SHA-256 par défaut. MD5 ne doit plus apparaître dans votre code dès qu'un attaquant peut influencer l'entrée, ce qui couvre la quasi-totalité des cas serveur. La performance supérieure de MD5 ne justifie plus son usage, l'écart est devenu négligeable avec les accélérations SHA-NI présentes sur les CPU x86 et ARM modernes.
Questions fréquentes
MD5 est-il encore sûr pour des mots de passe ?
Non, jamais. Et ce point est indépendant des collisions : MD5 est trop rapide. Un GPU casse plusieurs milliards de hash MD5 par seconde, ce qui rend toute attaque par dictionnaire ou force brute triviale. Pour les mots de passe, utilisez bcrypt, Argon2 ou scrypt (voir notre comparatif Bcrypt vs Argon2).
Quelle est la différence entre SHA-256 et SHA-2 ?
SHA-2 est la famille, SHA-256 en est un membre. La famille comprend SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 et SHA-512/256. Elles diffèrent par la taille de sortie et la taille des blocs internes. SHA-256 est la variante la plus utilisée.
Faut-il passer à SHA-3 ?
Pas forcément. SHA-3 (publié en 2015) repose sur une construction radicalement différente (Keccak / sponge), mais SHA-256 reste sûr. SHA-3 sert surtout de plan B en cas de problème inattendu sur SHA-2. Choisissez SHA-3 si une norme l'exige, ou si vous voulez une diversité cryptographique. Sinon, SHA-256 reste le choix standard.
Peut-on inverser un hash MD5 ou SHA-256 ?
Non, par construction : un hash perd de l'information. Les sites de « décryptage » MD5 ne font qu'interroger des bases gigantesques de hash précalculés (rainbow tables) pour des entrées courantes. Pour des données aléatoires longues, retrouver l'entrée est impossible avec les deux algorithmes.
SHA-256 sera-t-il cassé par un ordinateur quantique ?
L'algorithme de Grover divise par deux la sécurité effective des hashs face à un attaquant quantique : SHA-256 offrirait alors environ 128 bits de sécurité, ce qui reste largement suffisant. Pas d'urgence côté hash, contrairement à la cryptographie asymétrique.