Skip to content
Retour au blog
Tutoriels

MD5 vs SHA-256 : comparaison des algorithmes de hachage pour les développeurs

Comparez les algorithmes de hachage MD5, SHA-1, SHA-256 et SHA-512 en termes de sécurité, vitesse, taille de sortie et cas d'utilisation réels. Découvrez quel algorithme choisir pour les sommes de contrôle, la vérification d'intégrité et le stockage de mots de passe.

12 min read

MD5 vs SHA-256 : quel algorithme de hachage utiliser ?

Le hachage est l’une des opérations les plus fondamentales en informatique — pourtant, choisir le mauvais algorithme peut exposer votre système à des attaques par collision, de la corruption de données ou des surcoûts de performance inutiles. Ce guide compare les quatre algorithmes de hachage les plus répandus et vous propose un cadre de décision clair.

Qu’est-ce qu’une fonction de hachage ?

Une fonction de hachage cryptographique prend des données d’entrée de taille arbitraire et produit une sortie de taille fixe (le « condensé » ou « hash »). Les bonnes fonctions de hachage possèdent trois propriétés :

  1. Déterministe : la même entrée produit toujours la même sortie.
  2. Irréversible : il est impossible de retrouver l’entrée originale à partir du hash.
  3. Résistante aux collisions : il doit être informatiquement infaisable de trouver deux entrées différentes produisant le même hash.

Lorsque la propriété n°3 est compromise, l’algorithme est considéré comme « cryptographiquement cassé » — c’est exactement ce qui est arrivé à MD5 et SHA-1.

Comparaison des algorithmes en un coup d’œil

PropriétéMD5SHA-1SHA-256SHA-512
Taille de sortie128 bits (32 caractères hex)160 bits (40 caractères hex)256 bits (64 caractères hex)512 bits (128 caractères hex)
Taille de bloc512 bits512 bits512 bits1024 bits
Année d’introduction1991199520012001
ConcepteurRon RivestNSA / NISTNSA / NISTNSA / NIST
Résistance aux collisionsCassée (2004)Cassée (2017)SûreSûre
Vitesse (relative)Le plus rapideRapideModéréeModérée (plus rapide sur 64 bits)
Statut NISTObsolèteObsolèteRecommandéRecommandé

MD5 : rapide mais cassé

MD5 (Message-Digest Algorithm 5) a été conçu par Ronald Rivest en 1991 et est devenu le standard de fait pour les sommes de contrôle durant les années 1990 et le début des années 2000. Il produit un hash de 128 bits représenté en 32 caractères hexadécimaux.

Pourquoi MD5 est cassé

En 2004, Xiaoyun Wang a démontré des attaques par collision pratiques contre MD5. En 2008, des chercheurs ont créé un faux certificat SSL en exploitant les collisions MD5, prouvant que l’attaque n’était pas seulement théorique. Aujourd’hui, des collisions MD5 peuvent être générées en quelques secondes sur du matériel grand public.

// Générer un hash MD5 (uniquement pour un usage non sécuritaire)
// Le Web Crypto API ne prend pas en charge MD5 — utilisez une bibliothèque
import { md5 } from 'hash-wasm';

const hash = await md5('Hello, World!');
console.log(hash);
// → 'bea8252ff4e80f41719ea13cdf007273' (32 hex chars)

Quand MD5 reste acceptable

Bien que cryptographiquement cassé, MD5 reste utile pour des applications non liées à la sécurité :

  • Déduplication de fichiers : détecter les fichiers en double dans les systèmes de stockage
  • Clés de cache : générer des clés courtes et déterministes pour les recherches en cache
  • Sommes de contrôle d’intégrité : vérification rapide que les données n’ont pas été accidentellement corrompues (et non délibérément altérées)
  • Compatibilité avec les systèmes existants : interopérer avec des systèmes anciens qui exigent MD5

La distinction clé : MD5 protège contre la corruption accidentelle mais pas contre la manipulation délibérée.

SHA-1 : obsolète mais encore présent

SHA-1 (Secure Hash Algorithm 1) a été conçu par la NSA et publié par le NIST en 1995. Il produit un hash de 160 bits en 40 caractères hexadécimaux.

En 2017, Google et CWI Amsterdam ont démontré la première collision SHA-1 pratique (l’attaque « SHAttered »), en générant deux fichiers PDF différents ayant le même hash SHA-1. Les principaux navigateurs et autorités de certification avaient déjà commencé à rejeter les certificats SHA-1 dès 2016.

N’utilisez SHA-1 que pour la compatibilité avec des systèmes qui l’exigent (par exemple, Git utilise SHA-1 pour les hashes de commits, bien qu’il soit en transition vers SHA-256). Pour tout nouveau développement, choisissez SHA-256 ou un algorithme plus fort.

SHA-256 : le standard actuel

SHA-256 fait partie de la famille SHA-2, conçue par la NSA et publiée par le NIST en 2001. Il produit un hash de 256 bits en 64 caractères hexadécimaux et constitue l’algorithme recommandé pour pratiquement tous les besoins de hachage en 2026.

// Générer un hash SHA-256 avec le Web Crypto API (natif dans le navigateur)
async function sha256(text) {
  const data = new TextEncoder().encode(text);
  const hash = await crypto.subtle.digest('SHA-256', data);
  return Array.from(new Uint8Array(hash))
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
}

const hash = await sha256('Hello, World!');
console.log(hash);
// → 'dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f'

Pourquoi SHA-256 est le choix par défaut

  • Aucune attaque connue : en 2026, aucune attaque pratique par collision ou préimage n’existe contre SHA-256
  • Natif dans le navigateur : disponible via le Web Crypto API dans tous les navigateurs modernes — aucune bibliothèque nécessaire
  • Standard de l’industrie : utilisé par les certificats TLS, Bitcoin, les gestionnaires de paquets (npm, pip), les digests d’images Docker et la plupart des systèmes de vérification d’intégrité
  • Approuvé par le NIST : recommandé pour toutes les applications sensibles en matière de sécurité

SHA-512 : quand vous avez besoin de plus

SHA-512 produit un hash de 512 bits en 128 caractères hexadécimaux. Il utilise une taille de bloc de 1024 bits (contre 512 bits pour SHA-256), ce qui le rend plus rapide que SHA-256 sur les processeurs 64 bits car il traite davantage de données par cycle.

# Python : SHA-512 est aussi simple que SHA-256
import hashlib

hash_256 = hashlib.sha256(b'Hello, World!').hexdigest()
hash_512 = hashlib.sha512(b'Hello, World!').hexdigest()

print(f"SHA-256: {hash_256}")  # 64 chars
print(f"SHA-512: {hash_512}")  # 128 chars

Utilisez SHA-512 quand :

  • Vous avez besoin d’une marge de sécurité plus grande (résistance aux collisions de 256 bits contre 128 bits pour SHA-256)
  • Votre plateforme est 64 bits et la performance compte (SHA-512 peut être 1,5 fois plus rapide que SHA-256 sur x86-64)
  • Le protocole ou la spécification l’exige (certains schémas de certificats, exigences de conformité spécifiques)

Pour la plupart des applications, SHA-256 suffit. La longueur supplémentaire des hashes SHA-512 double le stockage et la bande passante sans avantage sécuritaire concret pour les cas d’utilisation courants.

Cadre de décision : quel hash utiliser

Pour l’intégrité des fichiers et les sommes de contrôle

Utilisez SHA-256. C’est le standard pour vérifier les téléchargements, comparer le contenu des fichiers et s’assurer que les données n’ont pas été corrompues. Si vous remplacez un système existant basé sur MD5, SHA-256 est le remplacement direct.

# Vérifier l'intégrité d'un téléchargement
sha256sum downloaded-file.tar.gz
# Comparer la sortie avec le hash publié

Pour le stockage de mots de passe

N’utilisez ni MD5 ni SHA-256 directement. Les fonctions de hachage généralistes sont trop rapides pour le hachage de mots de passe — un attaquant peut tester des milliards de combinaisons par seconde. Utilisez plutôt un algorithme de hachage de mots de passe dédié :

AlgorithmeStatutNotes
Argon2idRecommandéVainqueur du concours de hachage de mots de passe 2015 ; résistant en mémoire
bcryptBonLargement supporté ; sel intégré ; facteur de travail ajustable
scryptBonRésistant en mémoire ; utilisé par certains systèmes de cryptomonnaie
PBKDF2AcceptableApprouvé NIST mais non résistant en mémoire ; utilisez ≥600 000 itérations
SHA-256InadéquatTrop rapide ; pas de sel intégré ; vulnérable aux attaques GPU
MD5DangereuxCassé + trop rapide ; trivialement crackable
// MAUVAIS : ne hachez pas les mots de passe avec SHA-256
const hash = await sha256(password); // Crackable à des milliards/sec

// BON : utilisez bcrypt (exemple Node.js)
import bcrypt from 'bcrypt';
const hash = await bcrypt.hash(password, 12); // 12 tours ≈ 250ms
const isValid = await bcrypt.compare(input, hash);

Pour HMAC et l’authentification de messages

Utilisez SHA-256 avec HMAC. HMAC (Hash-based Message Authentication Code) combine une fonction de hachage avec une clé secrète pour vérifier à la fois l’intégrité et l’authenticité :

// HMAC-SHA256 pour la vérification de signature de webhook
async function verifyWebhook(payload, signature, secret) {
  const key = await crypto.subtle.importKey(
    'raw', new TextEncoder().encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']
  );
  const sig = Uint8Array.from(atob(signature), c => c.charCodeAt(0));
  return crypto.subtle.verify('HMAC', key, sig, new TextEncoder().encode(payload));
}

Pour le stockage adressable par contenu

Utilisez SHA-256. Git, Docker et IPFS utilisent tous le stockage adressable par contenu, où le hash du contenu sert d’adresse. SHA-256 offre une résistance aux collisions suffisante pour garantir l’unicité parmi des milliards d’objets.

Benchmarks de performance

Vitesse de hachage relative sur un processeur x86-64 moderne (plus élevé = plus rapide) :

AlgorithmeDébit (Mo/s)Vitesse relative
MD5~3 2001,0x (référence)
SHA-1~2 4000,75x
SHA-256~1 5000,47x
SHA-512~2 1000,66x

Note : SHA-512 est plus rapide que SHA-256 sur les processeurs 64 bits en raison de son état interne plus large. Sur les systèmes 32 bits, la situation s’inverse. Pour la plupart des applications, la différence de vitesse est négligeable — le hachage d’un fichier de 1 Mo prend moins de 1 ms avec n’importe lequel de ces algorithmes.

Erreurs courantes à éviter

1. Utiliser MD5 pour la sécurité

Les collisions MD5 sont triviales à générer. N’utilisez jamais MD5 pour les signatures numériques, la validation de certificats ou tout scénario où un attaquant pourrait forger une entrée malveillante.

2. Hacher les mots de passe avec SHA-256

SHA-256 n’est pas un algorithme de hachage de mots de passe. Il est trop rapide, ne possède pas de sel intégré et est vulnérable aux attaques par tables arc-en-ciel et au brute-force accéléré par GPU. Utilisez Argon2id ou bcrypt.

3. Supposer que la longueur du hash égale la sécurité

Un hash de 512 bits n’est pas automatiquement « plus sécurisé » qu’un hash de 256 bits en termes de résistance aux collisions. La marge de sécurité de SHA-256 (128 bits de résistance aux collisions) dépasse déjà largement les capacités de force brute. Choisissez en fonction de vos besoins réels, pas de la longueur du hash.

4. Inventer ses propres combinaisons de hachage

Des schémas comme SHA256(MD5(data)) ou MD5(data + salt) ne corrigent pas magiquement un algorithme cassé. Utilisez un seul algorithme éprouvé (SHA-256) ou une construction appropriée (HMAC).

Essayez par vous-même

Générez et comparez instantanément des hashes MD5, SHA-1, SHA-256 et SHA-512 avec notre générateur de hash — collez du texte ou déposez un fichier, et visualisez les quatre condensés côte à côte. 100 % dans votre navigateur, aucune donnée ne quitte jamais votre appareil.

Pour un aperçu plus large de la sécurité web incluant l’authentification, la validation des entrées et les en-têtes de sécurité, consultez notre guide Les essentiels de la sécurité web.

Foire aux questions

MD5 est-il encore sûr pour les sommes de contrôle ?

MD5 est sûr pour détecter la corruption accidentelle de fichiers — si un fichier est endommagé pendant le téléchargement, le hash MD5 changera presque certainement. Cependant, MD5 n’est pas sûr contre l’altération délibérée, car un attaquant peut créer un fichier modifié avec le même hash MD5. Pour la vérification d’intégrité dans un contexte adversaire (par exemple, la distribution de logiciels), utilisez SHA-256.

Quelle est la différence de vitesse entre SHA-256 et MD5 ?

SHA-256 est environ 2 fois plus lent que MD5 en débit brut. Sur du matériel moderne, MD5 hache à environ 3 200 Mo/s tandis que SHA-256 hache à environ 1 500 Mo/s. En pratique, cette différence est négligeable pour la plupart des applications — hacher un fichier de 100 Mo prend environ 70 ms avec SHA-256. L’écart de performance ne compte vraiment que pour les scénarios à très haut débit comme l’inspection de paquets réseau ou la déduplication de stockage à grande échelle.

Dois-je utiliser SHA-256 ou SHA-512 pour mon application ?

Utilisez SHA-256 pour la plupart des applications — il offre une résistance aux collisions de 128 bits, bien au-delà des capacités de force brute. Choisissez SHA-512 si : (a) votre plateforme est 64 bits et vous avez besoin d’un débit maximal, (b) une spécification ou une exigence de conformité l’impose, ou (c) vous souhaitez une marge de sécurité plus grande pour l’intégrité des données à long terme. La longueur supplémentaire du hash SHA-512 double le stockage et est rarement nécessaire.

SHA-256 peut-il être cracké ou inversé ?

SHA-256 ne peut pas être inversé — c’est une fonction à sens unique. En 2026, aucune attaque pratique par préimage ou collision n’existe contre SHA-256. La meilleure attaque connue nécessite 2^128 opérations pour les collisions, ce qui est informatiquement infaisable avec la technologie actuelle ou prévisible. SHA-256 est approuvé par le NIST et utilisé dans les infrastructures critiques incluant TLS, Bitcoin et les systèmes fédéraux.

Pourquoi certains systèmes utilisent-ils encore MD5 s’il est cassé ?

La compatibilité avec l’existant est la raison principale. De nombreux systèmes, protocoles et formats de fichiers existants ont été conçus autour de MD5 avant que ses faiblesses ne soient découvertes. La migration nécessite des changements coordonnés à travers tous les composants. Pour les usages non liés à la sécurité comme les clés de cache et la déduplication, l’avantage en vitesse de MD5 et sa sortie plus courte en font un choix pragmatique lorsque les attaques par collision ne font pas partie du modèle de menace.

Articles connexes

Voir tous les articles