Comment générer des hash MD5, SHA-256 et autres
Le hachage convertit n'importe quelle entrée (un mot de passe, un fichier, un message) en une chaîne de caractères de longueur fixe. La même entrée produit toujours le même hash, mais même un changement minuscule dans l'entrée produit un hash complètement différent. Cela rend le hachage essentiel pour la vérification d'intégrité, le stockage de mots de passe, les signatures numériques, les preuves blockchain, et des dizaines d'autres briques de l'informatique moderne. Choisir le bon algorithme, savoir pourquoi certains sont cassés, et reconnaître les schémas qui détournent les hachages transforment un outil de cinq secondes en une fondation sur laquelle vous pouvez bâtir en sécurité.
Une brève histoire des fonctions de hachage
Le hachage comme idée de programmation précède la cryptographie de plusieurs décennies, les tables de hachage en structures de données utilisent des fonctions simples comme CRC et FNV pour répartir les clés dans les buckets. Les hachages cryptographiques, conçus pour être irréversibles et résistants aux collisions, sont apparus à la fin des années 1980 avec MD4 (1990) puis MD5 (1991) de Ron Rivest. MD5 est devenu le standard de fait pendant deux décennies avant que des collisions pratiques le rendent dangereux pour les usages de sécurité.
Le SHA-0 (1993) du NIST a été retiré presque immédiatement et remplacé par SHA-1 (1995). SHA-1 a mieux tenu mais est tombé par étapes : attaques théoriques en 2005, scénario pratique de falsification de certificat en 2009, et la démonstration SHAttered de Google montrant deux PDF différents avec le même hash SHA-1 en 2017. La famille SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512), publiée en 2001, a été conçue comme remplaçante à plus long terme et reste sûre aujourd'hui. SHA-3 (Keccak, standardisé en 2015) est un design structurellement différent destiné à fournir une porte de sortie si SHA-2 tombait.
En parallèle, les hachages spécifiques aux mots de passe ont évolué séparément. Le simple MD5 ou SHA-1 s'est avéré trop rapide pour le stockage de mots de passe, alors bcrypt (1999), scrypt (2009) et Argon2 (2015, vainqueur de la Password Hashing Competition) ont ajouté une lenteur délibérée et une difficulté mémoire pour rendre les attaques par force brute des ordres de grandeur plus coûteuses. Le bon hash pour un mot de passe n'est jamais le même que le bon hash pour une somme de contrôle de fichier.
Comment fonctionne le hachage
Une fonction de hachage prend une entrée de n'importe quelle taille et produit une sortie de taille fixe :
| Entrée | Hash SHA-256 (16 premiers car.) |
|---|---|
| hello | 2cf24dba5fb0a30e... |
| Hello | 185f8db32271fe25... |
| hello! | ce06092fb948d9ff... |
Notez que changer un seul caractère (h minuscule en H majuscule) ou ajouter un caractère change complètement le hash. C'est ce qu'on appelle l'effet d'avalanche et c'est ce qui rend les hachages utiles pour repérer tout changement, aussi minuscule soit-il.
En interne, une fonction de hachage moderne divise son entrée en blocs de taille fixe (64 octets pour SHA-256, 128 pour SHA-512), fait passer chaque bloc dans une fonction de compression, et chaîne l'état vers l'avant. La sortie est l'état final après que le dernier bloc a été mélangé. Comme la chaîne dépend de chaque octet, aucun raccourci ne permet à un attaquant de modifier l'entrée sans réécrire tout le hash.
Un bon hash cryptographique a trois propriétés de sécurité : résistance à la pré-image (vous ne pouvez pas trouver une entrée qui produit un hash donné), résistance à la seconde pré-image (étant donné une entrée, vous ne pouvez pas trouver une entrée différente avec le même hash) et résistance aux collisions (vous ne pouvez pas trouver deux entrées distinctes avec le même hash). MD5 échoue aux trois ; SHA-1 échoue à la résistance aux collisions ; SHA-2 et SHA-3 tiennent encore les trois.
Algorithmes de hachage courants
| Algorithme | Bits de sortie | Longueur | Statut | À utiliser pour |
|---|---|---|---|---|
| MD5 | 128 | 32 hex | Cassé (non sûr) | Sommes de contrôle héritées, usages non sécurité |
| SHA-1 | 160 | 40 hex | Cassé (non sûr) | Systèmes hérités uniquement |
| SHA-224 | 224 | 56 hex | Sûr (de niche) | Préférer SHA-256 |
| SHA-256 | 256 | 64 hex | Sûr | Intégrité de fichier, signatures numériques |
| SHA-384 | 384 | 96 hex | Sûr | Suites de chiffrement TLS 1.3 |
| SHA-512 | 512 | 128 hex | Sûr | Applications haute sécurité, perf 64 bits |
| SHA3-256 | 256 | 64 hex | Sûr | Alternative à l'épreuve du futur de SHA-256 |
| BLAKE2b / BLAKE3 | 256 ou 512 | variable | Sûr, très rapide | rsync, restic, hachage en masse |
| HMAC-SHA256 | 256 | 64 hex | Sûr | Signature de requête API |
| bcrypt | 184 | 60 car. (personnalisés) | Sûr pour mots de passe | Stockage de mots de passe |
| Argon2id | configurable | variable | Le meilleur pour mots de passe | Stockage moderne de mots de passe |
| CRC32 | 32 | 8 hex | Détection d'erreur seulement | Pas un hash de sécurité |
SHA-256 est le standard actuel pour la plupart des usages généraux. MD5 et SHA-1 ne devraient être utilisés que pour interagir avec des systèmes hérités qui les exigent ; jamais pour des frontières de sécurité. Pour les mots de passe, utilisez bcrypt ou Argon2id, pas du SHA-256 brut.
Comment générer un hash
- Choisissez votre algorithme : sélectionnez MD5, SHA-1, SHA-256, SHA-384 ou SHA-512 dans le menu déroulant. Utilisez SHA-256 sauf raison particulière d'en choisir un autre.
- Entrez du texte ou téléversez un fichier : tapez ou collez du texte dans la zone d'entrée, ou déposez un fichier. L'outil exécute le hachage entièrement dans votre navigateur en utilisant l'API Web Crypto.
- Copiez le hash : le résultat est une chaîne hexadécimale que vous pouvez utiliser pour vérification, stockage, ou comparaison. Beaucoup d'outils proposent aussi un encodage base64 pour un stockage compact.
- Comparez si besoin : collez le hash publié à côté du hash généré et laissez l'outil signaler le premier caractère différent. La comparaison visuelle de chaînes de 64 caractères est sujette à erreur.
Usages pratiques
Vérification d'intégrité de fichier : téléchargez un fichier et comparez son hash au hash officiel de l'éditeur. S'ils correspondent, le fichier est authentique et non corrompu. C'est le cas d'usage qui motive la plupart des générations de hash quotidiennes, le flux derrière chaque invocation de sha256sum sous Linux et chaque page de checksums sur un téléchargement de logiciel.
Stockage de mots de passe, les applications stockent des hashes de mots de passe, pas les mots de passe eux-mêmes. Quand vous vous connectez, votre saisie est hachée et comparée au hash stocké. Le détail crucial est que l'algorithme doit être lent à dessein (bcrypt, Argon2) pour qu'un attaquant qui vole le fichier de hashes ne puisse pas le brute-forcer en un temps raisonnable.
Déduplication de données : les systèmes de stockage et outils de sauvegarde hachent des morceaux de données, souvent des blocs de quelques mégaoctets, et utilisent le hash comme clé. Deux morceaux avec le même hash sont supposés identiques, donc la seconde occurrence ne stocke qu'un pointeur. Des outils comme restic, borg et beaucoup de services de sauvegarde cloud en dépendent.
Signatures numériques : une signature numérique est un hash qui a été chiffré avec une clé privée. Le vérificateur hache le document, déchiffre la signature avec la clé publique, et vérifie que les deux correspondent. Cela prouve à la fois que le document n'a pas changé et que le signataire a approuvé cette version exacte.
HMAC pour la sécurité d'API : HMAC combine une fonction de hachage avec une clé secrète, produisant une étiquette que toute personne ayant la même clé peut vérifier. Les webhooks, la signature de requêtes AWS et beaucoup de RPC internes utilisent HMAC-SHA256 pour que le récepteur sache que la requête vient vraiment d'une source de confiance.
Blockchain et arbres de Merkle : les cryptomonnaies, le stockage adressable par contenu (IPFS) et Git utilisent tous des arbres de hachage pour s'engager sur de grands ensembles de données avec un seul hash racine. Changez un octet n'importe où dans l'arbre, et le hash racine change, c'est la propriété qui rend les données infalsifiables.
Clés de cache : les systèmes de cache hachent les URL de requête ou paramètres pour produire une clé de lookup compacte. CRC et SipHash sont courants ici car ils privilégient la vitesse aux garanties cryptographiques.
Hash vs HMAC vs signature numérique
Ces trois concepts sont souvent confondus car ils produisent tous des chaînes hexadécimales d'apparence similaire.
| Concept | Entrées | Vérifie | Usage courant |
|---|---|---|---|
| Hash | Données | Les données n'ont pas changé depuis le calcul du hash | Sommes de contrôle, adressage par contenu |
| HMAC | Données + secret partagé | Données inchangées ET créées par quelqu'un avec le secret | Signature de requête API, webhooks |
| Signature numérique | Données + clé privée | Données inchangées ET signées par une clé spécifique | Certificats TLS, signature de logiciel |
| Chiffrement | Données + clé (n'importe laquelle) | Les données ont été gardées secrètes en transit | Confidentialité (pas intégrité seule) |
Un hash brut ne prouve rien sur qui l'a créé. HMAC prouve que l'expéditeur avait le secret partagé. Une signature identifie en plus le signataire sans avoir besoin de partager le secret. Choisissez l'outil le plus faible qui résout votre vrai problème.
Pièges courants
- Utiliser MD5 ou SHA-1 pour la sécurité, les deux sont cryptographiquement cassés. Des collisions peuvent être générées en secondes (MD5) ou heures sur matériel cloud (SHA-1). Réservez-les strictement aux sommes de contrôle non sécurité.
- Hacher les mots de passe avec des hashes généralistes, du SHA-256 simple sur un mot de passe est suffisamment rapide pour qu'un attaquant avec une base volée puisse essayer des milliards de tentatives par seconde sur GPU. Utilisez bcrypt, scrypt ou Argon2id à la place.
- Oublier de saler, deux utilisateurs avec le même mot de passe ne devraient jamais produire le même hash stocké. Saler (ajouter des octets aléatoires à chaque mot de passe avant hachage) empêche cela et arrête les recherches en table arc-en-ciel.
- Faire confiance à un hash servi depuis le même endroit que le fichier, un attaquant qui compromet un miroir de téléchargement peut échanger à la fois le fichier et son hash. Chaque fois que possible, récupérez le hash depuis un domaine différent ou vérifiez une signature GPG sur la liste de hashes.
- Confusion hex vs base64, le même hash s'encode en 64 caractères hex ou 44 caractères base64. Comparer des encodages différents échouera toujours. Faites correspondre l'encodage avant de comparer.
- Comparer avec
==dans du code de sécurité, la comparaison de chaînes court-circuite au premier caractère différent, ce qui fuit de l'information temporelle. Utilisez une fonction de comparaison en temps constant dans tout code qui décide d'une authentification. - Tronquer un hash pour économiser de l'espace, ne prendre que les 8 premiers caractères de SHA-256 fait passer la résistance aux collisions d'astronomique à triviale. Soit stockez le hash complet, soit utilisez un hash conçu pour des sorties courtes (SipHash).
- Utiliser un CRC pour la sécurité, CRC32 est très bon pour attraper la corruption accidentelle mais trivial à falsifier. N'importe qui peut ajouter des octets pour faire en sorte qu'un CRC donne n'importe quelle valeur choisie.
- Re-hacher au lieu d'utiliser un PBKDF, faire boucler SHA-256 dix mille fois à la main est le hash de mot de passe artisanal classique ; il fuit de la temporalité et est beaucoup plus lent que les implémentations PBKDF2/bcrypt/Argon2 bien auditées.
- Stocker le hash à côté du sel avec le même hash à chaque connexion, un attaquant qui lit le hash et le sel ne doit casser qu'un mot de passe à la fois, mais si vous réutilisez un sel global unique pour tous les utilisateurs, une seule table arc-en-ciel les casse tous. Chaque utilisateur reçoit un sel aléatoire frais.
Outils et bibliothèques alternatifs
Le générateur de hash navigateur est le chemin le plus rapide pour des hashes ponctuels. Pour une utilisation répétée ou des scripts, les outils en ligne de commande et bibliothèques de langage prennent le relais.
| Outil | Plateforme | Force | À surveiller |
|---|---|---|---|
| Générateur de hash web | Navigateur | Instantané, sans installation, sans upload | Une entrée à la fois |
sha256sum, md5sum | Linux | Scriptable, GNU coreutils | --check lit les fichiers SHA256SUMS |
shasum -a 256 | macOS, BSD | Inclus dans l'OS | Nom de binaire différent de Linux |
Get-FileHash | Windows PowerShell | De première classe sous Windows | Format de sortie différent de sha256sum |
openssl dgst -sha256 | Multiplateforme | Si vous avez déjà OpenSSL | Plus lent que les outils dédiés |
b3sum / BLAKE3 CLI | Multiplateforme | Débit multi-GB/s | Plus récent, moins omniprésent |
Python hashlib | Python | Intégré, tous les algorithmes majeurs | Restez aux entrées en octets |
Node crypto | Node.js | Intégré, API similaire à Python | Streaming pour gros fichiers |
Web Crypto subtle.digest | JS navigateur | Natif, rapide, sans dépendance | API asynchrone uniquement |
| HashiCorp Vault / KMS | Cloud | Gestion centralisée de clés pour HMAC et signature | Verrouillage fournisseur |
Pour les mots de passe, traitez l'écosystème de langage différemment : utilisez bcrypt, argon2-cffi, passlib, ou l'adaptateur recommandé de votre plateforme, jamais une boucle SHA artisanale.
Vie privée et le générateur de hash
Le générateur de hash tourne entièrement dans votre navigateur. Le texte que vous tapez est haché en mémoire avec l'interface SubtleCrypto de Web Crypto, et tout fichier que vous sélectionnez est diffusé via l'API FileReader sans téléversement. Il n'y a aucun journal des entrées hachées, aucune analytique sur les algorithmes populaires, et aucun moyen pour quiconque de reconstruire ce que vous vérifiiez. Les hashes eux-mêmes résument souvent du matériel sensible, mots de passe, documents internes, clés privées, exactement le genre de données que vous ne devriez jamais coller dans un formulaire web inconnu. Faire le travail côté client garde l'entrée sur votre machine, là où elle doit être. Pour une tâche aussi routinière que générer une somme de contrôle, le réglage de vie privée par défaut devrait être : rien ne quitte la page, rien n'est stocké, rien n'est partagé.
Questions fréquentes
Quelle est la différence entre MD5, SHA-1 et SHA-256 ?
MD5 produit un hash de 128 bits (32 caractères hex), SHA-1 produit 160 bits (40 caractères) et SHA-256 produit 256 bits (64 caractères). MD5 et SHA-1 sont considérés comme cryptographiquement cassés. SHA-256 est actuellement sûr et recommandé pour la vérification d'intégrité et la sécurité.
Peut-on inverser un hash pour retrouver la donnée d'origine ?
Non. Les fonctions de hash sont à sens unique par conception. Vous ne pouvez pas inverser mathématiquement un hash vers son entrée. En revanche, les mots de passe courants peuvent être retrouvés dans des tables précalculées (rainbow tables), d'où l'importance de saler les mots de passe avant hashage.
Qu'est-ce que HMAC ?
HMAC (Hash-based Message Authentication Code) combine une fonction de hash avec une clé secrète. Il vérifie à la fois l'intégrité et l'authenticité des données, prouvant qu'elles n'ont pas été altérées et qu'elles ont été produites par quelqu'un connaissant la clé secrète.
Mes données sont-elles envoyées sur un serveur ?
Non. Tout le hashage tourne dans votre navigateur avec l'API Web Crypto. Vos textes et fichiers ne quittent jamais votre appareil.
Why should I never use MD5 or SHA-1 for password storage even with a salt?
Both algorithms are extremely fast, which is the opposite of what you want for passwords. An attacker with a stolen hash file can try billions of guesses per second on a GPU. Password-hashing functions like bcrypt, scrypt, and Argon2 are deliberately slow and memory-hard, which forces attackers to spend orders of magnitude more time per guess.
When should I use SHA-512 instead of SHA-256?
On 64-bit CPUs, SHA-512 is often slightly faster than SHA-256 because its inner state and word size are tuned to 64-bit operations. Use SHA-512 when you want a longer digest (128 hex characters) for collision resistance margin, or when you are already in a SHA-512 ecosystem (TLS 1.3 with certain cipher suites, some HMAC implementations).