A veces llega una cadena enigmática de letras y números y todo el mundo pregunta qué tipo de hash es. Hay cientos de variantes, desde el antiguo MD5 hasta esquemas modernos de contraseñas como bcrypt, scrypt y Argon2id. La buena noticia es que casi siempre se puede reconocer el tipo sin brujería si se mira la longitud, el alfabeto, prefijos característicos y el contexto del sistema, y luego confirmar las sospechas con herramientas. A continuación he reunido un algoritmo de trabajo y un repaso de utilidades que ahorran horas de vida y nervios.
Cómo empezar un análisis rápido
Antes de recurrir a la «magia» hay tres comprobaciones simples que sorprenden por su eficacia. No requieren red y aclaran el 70% de los casos.
- Longitud cuente los caracteres. 32 suele ser MD5 o NTLM, 40 parece SHA-1, 64 indica SHA-256, 128 sugiere SHA-512. Si la longitud es impar o extrañamente corta, quizá no sea un hash criptográfico sino, por ejemplo, un CRC32 o simplemente Base64 de algo.
- Alfabeto los caracteres hex
[0-9a-f]apuntan a hexadecimal. La presencia de./$y+suele indicar Base64 o formatos modulares de archivos/sistemas. - Prefijos los formatos modulares suelen identificarse por prefijos.
$1$es md5crypt,$5$sha256crypt,$6$sha512crypt,$2a$/$2b$/$2y$es bcrypt,$argon2id$se describe por sí mismo,$pbkdf2-sha256$aparece en marcos web. En PostgreSQL la contraseña empieza conmd5, en MySQL a menudo con*+ 40 hex en mayúsculas.
Guía de longitudes y pistas
Esto no es «la verdad absoluta», sino una orientación para reducir la lista de sospechosos. Siempre verifique el contexto y la sal.
| Indicador | Candidatos | Pistas |
|---|---|---|
| 32 hex | MD5, NTLM, LM |
NTLM suele estar en mayúsculas, sin sal; LM a menudo contiene aad3b435b51404eeaad3b435b51404ee en la mitad de la pareja
|
| 40 hex | SHA-1, esquemas antiguos de MySQL |
MySQL: * + 40 HEX; Apache {SHA} — Base64 de SHA-1
|
| 64 hex | SHA-256 |
Si hay $5$ — ya es sha256crypt
|
| 128 hex | SHA-512 |
$6$ — sha512crypt
|
| 60 caracteres | bcrypt |
Siempre empieza con $2a$/$2b$/$2y$ seguido de la «coste», por ejemplo $12$
|
| Prefijo modular | md5/sha256/sha512-crypt, PBKDF2, scrypt, Argon2 |
$1$, $5$, $6$, $pbkdf2-sha256$, $scrypt$, $argon2id$
|
| Base64 con llaves | Apache {SHA}, {SSHA} |
A menudo en .htpasswd
|
md5 + 32 hex
|
PostgreSQL |
Formato md5<md5(password+username)>
|
Empieza con $argon2id$
|
Argon2id | Parámetros v, m, t, p directamente en la cadena |
Herramientas que realmente ayudan
A continuación montamos el arsenal. Es mejor disponer de opciones locales y en la nube para verificación cruzada. Abajo hay enlaces a proyectos verificados.
1. Name-That-Hash CLI
Herramienta abierta de la comunidad HashPals que intenta «adivinar» el tipo mediante firmas, longitudes, prefijos y contexto. Funciona sin conexión, ofrece una lista de candidatos con puntuaciones y sugiere modos para atacantes como hashcat y John.
- Repositorio: GitHub
- Instalación:
pip install name-that-hashopipx install name-that-hash - Ejemplos:
# cadena única nth --text "5f4dcc3b5aa765d61d8327deb882cf99" # desde archivo nth --file hashes.txt # mostrar solo las hipótesis más probables nth --text "$2b$12$4u2mQJ7..." --most-likely
2. hashID
Clásico en Python. Usa un conjunto de expresiones regulares y heurísticas. Sí, a veces da «demasiados candidatos», pero como filtro rápido sirve.
- Repositorio: GitHub
- Ejecutar:
python hashid.py 5baa61e4c9b93f3f0682250b6cf8331b python hashid.py -m "$6$rounds=5000$salt$..." # mostrar modos de hash
3. hash-identifier
Otro identificador ligero en Python. Puede reemplazar a hashID pero muchos ya lo tienen en su kit de pentesting.
- Repositorio: GitHub
- Ejecutar:
python hash-identifier.py
4. CyberChef
Navaja suiza universal para trabajar con datos. No tiene un botón «adivinar hash», pero cuenta con operaciones Magic, cálculo de hashes, decodificación y fuerza bruta de variantes. Muy útil para verificar hipótesis y estudiar formatos.
- Versión en línea: CyberChef
- Consejo: pruebe la cadena: decodificar Base64 → comprobar la longitud → calcular el hash de la cadena de prueba «password» y comparar.
5. Identificadores en línea
Cuando hay internet a mano, puede verificar hipótesis en servicios en línea. Son útiles como «segunda opinión», pero no envíe datos sensibles.
- hashes.com identificación rápida y ejemplos de formatos
- TunnelsUp analizador gráfico con pistas
6. Referencia de modos de hashcat
No es un «identificador», pero cuando ya tiene una sospecha, la lista de modos y ejemplos evita errores en los parámetros. A menudo es la prueba final.
- Referencia: example hashes
Algoritmo paso a paso para reconocer
Para no convertir el proceso en un «y si», mantenga un guion corto. Funciona bien tanto en forense como en bug bounty.
- Reúna contexto de dónde vino la cadena: base de datos, registros, aplicación web, SO. Los frameworks tienen formatos propios, por ejemplo Django
pbkdf2_sha256$o Joomla con$P$. - Cuente longitud y alfabeto registre los datos concretos: longitud, conjunto de caracteres, si tiene prefijo.
- Mire los prefijos todo lo que empieza por
$casi siempre se describe por sí mismo. - Pase por utilidades locales primero
nth, luegohashID. Compare los candidatos principales. - Verificación cruzada en línea la misma cadena en hashes.com o TunnelsUp. Si coinciden tres fuentes, probablemente sea ese formato.
- Prueba con una cadena conocida use «password» o «123456», calcule los candidatos en CyberChef y compare formato y longitud.
- Mantenga un manual operativo anote los indicadores claros en la wiki del equipo para no volver a buscarlos en cada proyecto.
Errores frecuentes y cómo evitarlos
La mayoría de errores no vienen por «malas herramientas», sino por formatos similares y sales olvidadas. Esto es en lo que más se cae.
- MD5 y NTLM mismo tamaño ambos 32 hex. El contexto y la capitalización ayudan. NTLM suele estar en mayúsculas y se calcula sobre UTF-16LE.
- «Es Base64 y no un hash» la presencia de
=al final y de+/sugiere codificación. Decodifique y vea el contenido. - La sal cambia la longitud md5crypt/sha*crypt, PBKDF2, bcrypt, scrypt y Argon2 incluyen la sal y parámetros en la cadena. Nunca intente «romper como MD5» algo que tiene aspecto
$6$.... - Servicios en línea y privacidad no envíe hashes reales de usuarios a formularios externos. Anonimice la sal o use herramientas locales.
- CRC y sumas de comprobación cadenas cortas de 8 caracteres suelen ser CRC32, no criptográficamente seguras. No las confunda con «hashes de contraseña».
Mini guía de expresiones regulares
Si necesita filtrar logs rápidamente, estas máscaras RegEx ayudan a identificar candidatos. No son perfectas, pero son prácticas.
# 32 hex (MD5/NTLM/LM)
b[a-f0-9]{32}b
# 40 hex (SHA-1)
b[a-f0-9]{40}b
# bcrypt
$2[aby]$d{2}$[./A-Za-z0-9]{53}
# sha256/512-crypt
$(5|6)$[./A-Za-z0-9]+$[./A-Za-z0-9]+b
# Argon2 (id/i/d)
$argon2(id|i|d)$v=d+$.*$.+
Ejemplos prácticos
A continuación un par de escenas «en vivo» sobre cómo razonar paso a paso.
Ejemplo 1 cadena corta de ocho caracteres
9e107d9d
Es sospechosamente corto para un hash criptográfico. Comprobamos en CyberChef que es CRC32 de «fox» y entendemos que es una suma de comprobación. Intentar «romper una contraseña» a partir de ello no tiene sentido.
Ejemplo 2 60 caracteres con prefijo
$2b$12$LzQ1kZs7QFQv4Q5kE3Z3Se0xXGxHk1Y7oS2Gx3hVZ0QJX7FJrHq5e
Es bcrypt. Vemos $2b$ y el «coste» $12$. Para ataques hará falta el modo correspondiente en hashcat. La cuestión deja de ser «qué es» y pasa a «qué parámetros usar en el diccionario y la máscara».
Ejemplo 3 32 hex en mayúsculas
32ED87BDB5FDC5E9CBA88547376818D4
Parece NTLM. Confirme con nth y compárelo con example hashes. Si es un volcado de Windows, casi seguro que lo es.
Integración en el flujo de trabajo
Para que el reconocimiento no se convierta en «recordar cómo se hacía cada seis meses», automatice la rutina.
- Crear una envoltura simple un wrapper sobre
nth+hashIDque acepte una cadena, muestre la intersección de los principales candidatos y liste los modos de hashcat. - Wiki del equipo una página con la tabla de prefijos y formatos típicos del manual. Añada también notas sobre sus productos.
- Política de datos regla estricta «hashes reales — solo offline». Para demos y tickets use ejemplos sintéticos.
Lista de verificación breve
- Primero longitud, alfabeto, prefijo. Después las herramientas.
- El contexto decide: servidor, framework, SO indican el formato.
- Verifique cruzado offline y online; no confíe en una sola fuente.
- No confunda codificación básica con criptografía.
- Las sales y parámetros suelen vivir dentro de la cadena; no los «recorte».
Enlaces útiles
Guárdelos en marcadores; le servirán en el momento más inesperado.
P.D. Si tiene dudas, intente crear el mismo hash de «password» y compare formato y longitud. Nada despeja más que experimentar con una muestra de prueba.