Générateur de Hachage MD5
Chiffrement MD5 en ligne, prend en charge la sortie 16 bits et 32 bits, conversion majuscules/minuscules
Paramètres de format
Qu'est-ce que le chiffrement MD5 ?
MD5 (Algorithme de résumé de message 5) est une fonction de hachage cryptographique largement utilisée, conçue par le cryptographe américain Ronald Rivest en 1991. MD5 peut mapper des données de toute longueur à une valeur de hachage fixe de 128 bits (16 octets), généralement représentée par 32 chiffres hexadécimaux. MD5 a été largement utilisé pour la vérification de l'intégrité des données, le stockage des mots de passe et les signatures numériques. Cependant, en 2004, la cryptographe chinoise Wang Xiaoyun et son équipe ont découvert des vulnérabilités de collision dans MD5, permettant aux attaquants de construire deux données différentes avec la même valeur MD5. Par conséquent, MD5 n'est plus adapté aux scénarios sensibles à la sécurité. Les formats de sortie MD5 se déclinent en deux types : le format standard 32 bits (valeur de hachage complète) et le format tronqué 16 bits (prenant les 16 caractères du milieu de la valeur 32 bits). Cet outil prend en charge les deux formats de sortie avec des options d'affichage en majuscules ou minuscules.
Comment utiliser
Comment utiliser
- Entrez le texte à chiffrer dans le champ de saisie
- Sélectionnez le format de sortie : majuscule 32 bits, minuscule 32 bits, majuscule 16 bits ou minuscule 16 bits
- La valeur MD5 est calculée et affichée automatiquement
- Cliquez sur le bouton « Copy » pour copier le résultat
Description du format de sortie
- Utilisez la sortie de 32 caractères lorsque vous avez besoin du digest MD5 complet pour des checksums, des clés de cache ou des champs d'API hérités.
- Utilisez la sortie de 16 caractères uniquement lorsqu'un système hérité attend explicitement les 16 caractères du milieu du digest complet.
Description de la casse
- Les valeurs MD5 en majuscules et en minuscules contiennent les mêmes octets hexadécimaux ; seule la présentation diffère.
- Lors de la comparaison de valeurs MD5, faites correspondre la casse exacte exigée par le système cible afin d'éviter les fausses non-correspondances.
Cas d’utilisation
Principe technique
MD5 (Message-Digest Algorithm 5) a été conçu par Ronald Rivest au MIT en 1991 et publié sous la référence RFC 1321, remplaçant le MD4 compromis. Il a été le cheval de bataille des années 1990 et 2000 : vérification d'intégrité de fichiers, stockage de mots de passe (de manière insuffisante, sans sel), signatures numéraires, empreintes de logiciels malveillants, et algorithme de hachage par défaut dans des outils aussi variés que `md5sum`, la fonction `MD5()` de MySQL, l'ancien magasin d'objets de Git et `openssl dgst -md5`. La sortie fait 128 bits (16 octets), presque toujours affichée sous forme de 32 caractères hexadécimaux en minuscules. La conception suit la construction Merkle-Damgård : on remplit le message jusqu'à un multiple de 512 bits, on ajoute une longueur 64 bits en little-endian, puis on itère une fonction de compression sur chaque bloc de 512 bits. L'état de 128 bits est exposé dans quatre registres 32 bits A, B, C, D, initialisés à des constantes fixes (0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 — choisies comme valeurs « nothing-up-my-sleeve » : ce sont les racines carrées de 2, 3, 5, 10 en little-endian). Chaque bloc de 512 bits est divisé en seize mots de 32 bits M[0..15] et traverse 4 tours de 16 étapes (64 étapes au total). Les fonctions de tour sont F = (X AND Y) OR (NOT X AND Z), G = (X AND Z) OR (Y AND NOT Z), H = X XOR Y XOR Z, I = Y XOR (X OR NOT Z) ; chaque étape combine une fonction de tour, un mot du message, une constante de tour T[i] = floor(2^32 · |sin(i+1)|) et une rotation à gauche d'un montant spécifique à l'étape, puis ajoute le résultat à l'état. La logique des 4 tours : le tour 1 est rapide et non linéaire, le tour 2 est parallélisable, le tour 3 mélange plus agressivement, le tour 4 termine avec une forte diffusion. L'état final constitue le MD5 du message complet ; c'est ce qui fait de MD5 une fonction à sens unique au sens pré-quantique. L'effondrement : la résistance aux collisions est brisée, et c'est la seule chose qui compte pour un usage cryptographique. Wang et al. ont publié une attaque par collision complète en 2004 (les attaques CFRG ont réduit la recherche de collision à quelques heures sur un PC). En 2008, des chercheurs ont utilisé des collisions MD5 pour forger un certificat CA valide (l'attaque « chosen-prefix collision » de Stevens et al.), et en 2012 le malware Flame a exploité une collision MD5 encore non divulguée pour forger un certificat de signature de code Microsoft. L'article de 2004 a réduit l'espace de recherche de collision de 2^64 à environ 2^24, de sorte que tout attaquant disposant de quelques heures de calcul peut produire deux messages ayant le même MD5. Après Flame, Microsoft a explicitement banni MD5 dans Authenticode ; les navigateurs ont révoqué les certificats TLS signés avec MD5 entre 2014 et 2017 ; et l'IETF a depuis longtemps déprécié MD5 dans TLS, SSH et IPsec. Performances sur un ordinateur portable x86-64 moderne : MD5 hache à 400-700 Mo/s par cœur (limité par la bande passante mémoire sur les grandes entrées), SHA-256 à 200-300 Mo/s, SHA-512 plus rapide sur les CPU 64 bits grâce aux opérations sur des mots de 64 bits. Pour le hachage de mots de passe, MD5 est inadapté quel que soit le débit — bcrypt/scrypt/Argon2id sont volontairement paramétrables pour contrer l'accélération GPU. Sur un RTX 4090, Hashcat benchmarke MD5 à environ 60 GH/s (gigahash par seconde) — 7 à 8 fois plus rapide que SHA-256 sur le même GPU. Cet écart est la raison pour laquelle MD5 est dangereux : le GPU peut parcourir des tables précalculées en heures, pas en années. Le `crypto.subtle.digest('MD5', bytes)` de Web Crypto s'exécute à la vitesse du disque dans Chrome, Edge et Firefox 102+ ; les navigateurs plus anciens utilisent une implémentation pure JS (SparkMD5 ou celle de la page) à 50-150 Mo/s. Vecteurs de test de la RFC 1321 : la chaîne vide donne d41d8cd98f00b204e9800998ecf8427e, « a » donne 0cc175b9c0f1b6a831c399e269772661, « abc » donne 900150983cd24fb0d6963f7d28e17f72. Si votre sortie ne correspond pas, le bug est presque toujours un problème d'encodage (passer une chaîne JS à une implémentation MD5 JS au lieu d'octets UTF-8) plutôt que l'algorithme lui-même.
- La construction Merkle-Damgård rend MD5 vulnérable à l'extension de longueur : connaissant H(secret || msg), un attaquant peut calculer H(secret || msg || padding || extra) sans connaître le secret. C'est pourquoi MD5(secret || message) n'est pas un MAC sûr — utilisez HMAC-MD5 (RFC 2104) ou HMAC-SHA256 à la place, qui utilisent une structure différente (un hachage imbriqué à deux clés) résistante à cette attaque.
- Vecteurs de test (RFC 1321) : la chaîne vide donne d41d8cd98f00b204e9800998ecf8427e, « a » donne 0cc175b9c0f1b6a831c399e269772661, « abc » donne 900150983cd24fb0d6963f7d28e17f72. Si votre implémentation ne produit pas ces résultats, le bug est presque toujours un problème d'encodage (passer une chaîne JavaScript à une implémentation MD5 JS au lieu d'octets UTF-8 via TextEncoder), et non l'algorithme lui-même.
- Débit de hachage : un seul cœur d'un CPU x86-64 moderne traite environ 400-700 Mo/s en MD5, limité par la bande passante mémoire sur les grandes entrées. SHA-256 est environ 30 % plus lent à 200-300 Mo/s, et SHA-512 est plus rapide sur les CPU 64 bits car il opère sur des mots de 64 bits. Pour le hachage de mots de passe spécifiquement, le bon choix est bcrypt (facteur de coût 12) / scrypt / Argon2id, qui sont volontairement lents et paramétrables pour contrer l'accélération GPU.
- Les 4 « fonctions de tour » F, G, H, I ont été délibérément nommées pour former une phrase (« FiGiHI » / « figi hi »), signature de Rivest. Chacune n'utilise que des opérations au niveau du bit et une structure de mélange différente pour que l'algorithme ne s'effondre pas en un système linéaire ou affine sous cryptanalyse. Le concept de S-box de DES / AES n'existe pas dans MD5 ; la sécurité provient de l'expansion des mots du message et des constantes de rotation, pas des tables de substitution.
- Benchmark Hashcat sur un RTX 4090 : environ 60 GH/s pour MD5 (hash pur) et 30 GH/s pour MD5 avec sel. SHA-256 sur le même GPU atteint 8 GH/s. L'écart de 7 à 8 fois explique pourquoi les attaquants affectionnent MD5 : le GPU peut parcourir des tables précalculées en heures, pas en années. Utilisez SHA-256, bcrypt ou Argon2id pour tout ce qui doit résister à une attaque hors ligne.
- Le « double MD5 » (MD5(MD5(x))) se rencontre parfois dans de vieux code PHP et MySQL, souvent avec un sel. Il n'aide pas contre les attaques par collision (une collision de MD5 est une collision de MD5(MD5()) avec un travail supplémentaire en O(1)) et ne ralentit que légèrement la recherche de préimage (facteur 2). Le hachage moderne de mots de passe (Argon2id de la RFC 9106, scrypt de la RFC 7914, bcrypt avec un coût ≥ 12) est la seule réponse correcte pour le stockage de mots de passe ; si vous voyez MD5 dans une colonne de mot de passe moderne, c'est un bug.
- Migration depuis MD5 : si vous maintenez un système qui utilise actuellement MD5, la bonne migration consiste en une double écriture (calculer à la fois MD5 et SHA-256 à la lecture, préférer SHA-256 dans les nouveaux chemins de code) pendant une fenêtre de dépréciation, puis supprimer MD5 une fois que plus rien n'en dépend. Pour les protocoles hérités qui exigent MD5 (NTLM, challenge-response RADIUS, certains modes Kerberos), MD5 ne va pas disparaître de sitôt — Microsoft a corrigé NTLM pour utiliser AES en 2010, mais l'ancienne version est toujours activée par défaut par compatibilité, et vous devriez désactiver NTLMv1 entièrement si vous avez des systèmes Windows hérités.
- L'implémentation de la page : lorsque Web Crypto est disponible (Chrome, Edge, Firefox 102+), `crypto.subtle.digest('MD5', utf8Bytes)` est utilisé, ce qui s'exécute en code natif à la vitesse du disque. Sinon, une implémentation pure JS (SparkMD5 0.7 ou celle de la page) est utilisée, à 50-150 Mo/s. Les deux produisent une sortie identique, donc les vecteurs de test passent pour les deux moteurs. L'étape d'encodage est `new TextEncoder().encode(str)`, qui fournit toujours des octets UTF-8 ; ne passez pas une chaîne JavaScript directement à une implémentation MD5 uniquement JS ou vous obtierront un hash incorrect sur toute entrée non ASCII.
Exemples
Chaîne vide et texte court
Chaîne vide -> d41d8cd98f00b204e9800998ecf8427e
hello -> 5d41402abc4b2a76b9719d911017c592
RFC : RFC 1321 section A.1 définit ces vecteurs de testSensibilité à la casse
hello world -> 5eb63bbbe01eeed093cb22bb8f5acdc3
Hello -> 8b1a9953c4611296a827abf8c47804d7
HELLO -> eb61eead90e3b899c6bcbe27ac581660
Note : modifier un seul caractère change complètement l'empreinte (effet d'avalanche)Nombres et ponctuation
123456 -> e10adc3949ba59abbe56e057f20f883e
Hello, World! -> 65a8e27d8879283831b664bd8b7f0ad4
file.txt -> 3d8e577bddb17db339eae0b3d9bcf180
Note : tout changement de ponctuation ou d'espace produit une empreinte complètement différentePourquoi MD5 n'est pas recommandé pour la sécurité
Attaque par collision : en 2004, des chercheurs ont trouvé comment créer deux
messages différents avec la même empreinte MD5. Cela compromet les signatures
numériques et la validation des certificats.
Pour la sécurité, utilisez SHA-256 ou SHA-3 :
MD5 : 128 bits, résistance aux collisions cassée (attaque réalisable)
SHA-256 : 256 bits, aucune collision pratique trouvée
SHA-512 : 512 bits, marge encore plus solide
NIST : le NIST a déconseillé MD5 pour un usage cryptographique depuis 2005
Usage : MD5 reste sûr pour les vérifications d'intégrité de fichiers, la déduplication et les clés de cacheFAQ
Qu'est-ce que MD5 ?
MD5 (Message Digest 5, RFC 1321) est une fonction de hachage de 128 bits publiée par Ron Rivest en 1991. Elle renvoie toujours 32 caractères hexadécimaux quelle que soit la longueur de l'entrée, et la sortie change complètement si un seul bit d'entrée change. Elle est rapide — plusieurs centaines de Mo/s sur un CPU moderne.
MD5 est-il sûr ?
Pas pour la sécurité. Les attaques par collision contre MD5 sont praticables depuis 2004, et les collisions à préfixe choisi depuis 2007. N'utilisez pas MD5 pour les signatures numériques, les hash de certificats, le stockage de mots de passe ou toute détection d'altération où un attaquant peut choisir l'une des entrées.
À quoi puis-je encore utiliser MD5 ?
À détecter les corruptions accidentelles : sommes de contrôle de téléchargement, déduplication simple de fichiers de confiance et empreintes rapides de type ETag. De nombreux éditeurs continuent à publier le MD5 pour la rétrocompatibilité, souvent aux côtés du SHA-256.
Le calcul est-il effectué localement ?
Oui. Le MD5 du texte collé est calculé dans votre navigateur. Rien n'est téléversé ni journalisé. Vous pouvez le vérifier en consultant l'onglet Réseau pendant le calcul.
Pourquoi la même chaîne produit-elle un MD5 différent ailleurs ?
Presque toujours à cause d'une différence de caractère cachée : un BOM UTF-8, un saut de ligne final, CRLF au lieu de LF, ou un outil qui encode en UTF-8 tandis qu'un autre encode en UTF-16. L'algorithme MD5 lui-même est totalement déterministe d'une implémentation à l'autre.
Les MD5 en majuscules et en minuscules sont-ils identiques ?
Oui. Les 128 bits de sortie sont identiques ; la casse n'est qu'une convention d'affichage. Les vérificateurs doivent comparer sans tenir compte de la casse.
En quoi MD5 diffère-t-il de MD5(salt + password) ?
Le MD5 brut d'un mot de passe est trivialement cassable avec des rainbow tables. Ajouter un sel bloque les tables précalculées, mais MD5 reste bien trop rapide pour le hachage de mots de passe. Utilisez bcrypt/scrypt/Argon2 pour les mots de passe ; MD5 (avec ou sans sel) est le mauvais outil pour cela.