Identify the algorithm of a hash

identifies the most likely algorithm behind a hash (MD5, SHA-1, SHA-256, bcrypt, Argon2...) from its length and format, and tries to recover the plain text via a dictionary of common passwords
Paste any hash (hexadecimal, bcrypt $2y$..., Argon2 $argon2id$...). The tool detects the most likely algorithm.

Qu'est-ce qu'un hash cryptographique ?

Un hash (ou empreinte cryptographique) est le résultat d'une fonction qui transforme une donnée d'entrée de taille arbitraire (un mot de passe, un fichier, une chaîne) en une chaîne de taille fixe. Cette fonction est unidirectionnelle : à partir d'un hash, il est mathématiquement infaisable de retrouver l'entrée d'origine. Deux entrées identiques produisent toujours le même hash, mais le moindre changement dans l'entrée modifie complètement le résultat.

Notre outil identifie l'algorithme probable d'un hash à partir de son format, et tente un lookup contre un dictionnaire de mots de passe ultra-courants précalculés sur les principaux algorithmes.

Comment identifier un hash ?

L'identification repose sur trois indices :

  • La longueur : chaque algorithme produit une empreinte de taille fixe.
  • Le format : hexadécimal pur, Base64, ou Modular Crypt Format avec préfixes spécifiques.
  • Le préfixe : les hash de mots de passe modernes suivent le format $id$params$salt$hash, où id identifie sans ambiguïté la fonction utilisée.

Longueurs hexadécimales courantes

  • 8 caractères : CRC32 (somme de contrôle, pas un hash cryptographique)
  • 32 caractères : MD5, MD4, NTLM, RIPEMD-128
  • 40 caractères : SHA-1, RIPEMD-160
  • 64 caractères : SHA-256, SHA3-256
  • 96 caractères : SHA-384, SHA3-384
  • 128 caractères : SHA-512, SHA3-512, Whirlpool

Une longueur seule ne suffit pas à conclure : MD5 et NTLM partagent la même taille de 32 caractères hexa, par exemple. Notre outil renvoie alors la liste des algorithmes possibles.

Préfixes Modular Crypt Format

Les hash de mots de passe issus de crypt() ou de bibliothèques modernes utilisent un préfixe explicite :

  • $1$ : MD5 crypt
  • $5$ : SHA-256 crypt
  • $6$ : SHA-512 crypt
  • $2y$, $2a$, $2b$ : Bcrypt (variantes selon la plateforme)
  • $argon2i$, $argon2id$, $argon2d$ : Argon2 (variantes d'utilisation, Argon2id étant aujourd'hui recommandé)

Exemple de hash Bcrypt

$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy

Cas d'usage

  • Analyse de fuites de données : identifier l'algorithme utilisé par une base compromise pour évaluer la difficulté d'attaque.
  • Debug : confirmer rapidement quel algorithme a généré une empreinte trouvée dans une réponse API ou un log.
  • Audit de sécurité : repérer un système qui stocke encore des mots de passe en MD5 ou SHA-1 (à proscrire).
  • Forensique : caractériser un artefact dans une investigation.

Pourquoi un hash n'est pas réversible

Une fonction de hash est conçue pour être à sens unique. Il n'existe aucun algorithme de "décryptage de hash", parce qu'un hash n'est pas un chiffrement : c'est une projection. Plusieurs entrées différentes peuvent en théorie produire le même hash (collision), donc même en connaissant une entrée qui produit le bon hash, vous n'avez pas la garantie que c'est l'entrée d'origine.

En pratique, "casser" un hash signifie tester massivement des entrées candidates jusqu'à retrouver celle dont l'empreinte correspond. C'est ce que font les attaques par dictionnaire et par force brute.

Lookup dictionnaire intégré

Notre outil intègre un mini-dictionnaire de 39 mots de passe ultra-courants : chaîne vide, password, admin, 123456, qwerty, letmein, etc. Ces 39 entrées sont précalculées sur 10 algorithmes (MD5, SHA-1, SHA-256, SHA-512, MD4, NTLM, etc.). Si votre hash correspond à une de ces empreintes, l'outil vous renvoie le mot de passe en clair.

Cette fonctionnalité illustre pourquoi les hash simples ne sont pas adaptés aux mots de passe : un attaquant n'a même pas besoin de calculer, il consulte une table.

Hash simple vs hash de mot de passe

Tous les hash ne se valent pas pour stocker des mots de passe :

  • Hash simples (MD5, SHA-256, SHA-512) : conçus pour être rapides, ce qui est un défaut quand on veut résister à une attaque par force brute. Ils n'incluent pas de sel par défaut, donc deux utilisateurs avec le même mot de passe auront le même hash, exposant à des attaques par tables précalculées (rainbow tables).
  • Hash de mot de passe (bcrypt, scrypt, Argon2) : conçus pour être lents par construction, intègrent un sel aléatoire et un facteur de coût configurable. Argon2id est aujourd'hui l'état de l'art recommandé par l'OWASP.

Comment utiliser l'outil

  1. Collez le hash dans le champ d'entrée.
  2. L'outil détecte le format (longueur, préfixe) et propose les algorithmes possibles.
  3. Si le hash correspond à un mot de passe ultra-courant, le mot en clair s'affiche.
  4. Sinon, vous obtenez la liste des algorithmes candidats à explorer plus loin avec un outil dédié.

Questions fréquentes

Pourquoi mon hash bcrypt n'est pas matché contre le dictionnaire ?

Bcrypt utilise un sel aléatoire unique par hash : même avec le mot de passe password, chaque utilisateur produit un hash différent. Le précalcul dictionnaire ne fonctionne donc pas. C'est précisément la propriété qui rend bcrypt résistant aux attaques par tables.

Que faire si plusieurs algorithmes sont possibles pour la même longueur ?

Croisez avec d'autres indices : la source du hash (Active Directory pointe vers NTLM, Linux /etc/shadow vers SHA-512 crypt, une base MySQL ancienne vers MD5, etc.), et le contexte applicatif. À longueur égale, MD5 reste statistiquement le plus probable sur des systèmes anciens.

Comment "casser" un hash en pratique ?

Pour des tests de sécurité légitimes (audit, pentest), les outils standards sont John the Ripper et hashcat. Ils acceptent des wordlists massives (rockyou, etc.) et exploitent le GPU pour tester des milliards de candidats par seconde. La faisabilité dépend de l'algorithme : MD5 et SHA-1 cèdent vite, bcrypt et Argon2 ralentissent l'attaque de plusieurs ordres de grandeur.

Le dictionnaire intégré est-il consultable ?

Le dictionnaire est volontairement minimaliste (39 entrées) et sert à illustrer la faiblesse des hash simples sur des mots de passe triviaux. Pour une couverture sérieuse, utilisez une wordlist externe (rockyou, SecLists) avec John the Ripper ou hashcat.

Peut-on "décoder" un hash ?

Non. Un hash n'est pas un chiffrement : il n'existe pas de fonction inverse. Tout site qui promet de "décoder un hash" applique en réalité un lookup dans une base précalculée. Si votre mot de passe est unique et long, il n'y figure pas.

Example request

curl -X POST https://cdrn.fr/api/v1/tools/hash-identifier/execute \
  -H "Content-Type: application/json" \
  -d '{"hash":"..."}'

Input schema

Field Type Required Default
hash text

Endpoints

  • GET https://cdrn.fr/api/v1/tools - lists every available tool
  • GET https://cdrn.fr/api/v1/tools/hash-identifier - returns the schema for this tool
  • POST https://cdrn.fr/api/v1/tools/hash-identifier/execute - runs this tool with a JSON payload