Identificar el algoritmo de un hash

identifica el algoritmo probable de un hash (MD5, SHA-1, SHA-256, bcrypt, argon2...) a partir de su longitud y formato, e intenta encontrar el texto claro mediante un diccionario de contraseñas comunes
Pega cualquier hash (hexadecimal, bcrypt $2y$..., argon2 $argon2id$...). La herramienta detecta el algoritmo probable.

¿Qué es un hash criptográfico?

Un hash (o huella criptográfica) es el resultado de una función que transforma un dato de entrada de tamaño arbitrario (una contraseña, un fichero, una cadena) en una cadena de tamaño fijo. Esa función es unidireccional: a partir de un hash, es matemáticamente inviable recuperar la entrada original. Dos entradas idénticas producen siempre el mismo hash, pero el menor cambio en la entrada modifica por completo el resultado.

Nuestra herramienta identifica el algoritmo probable de un hash a partir de su formato y prueba un lookup contra un diccionario de contraseñas ultracorrientes precalculadas con los principales algoritmos.

¿Cómo identificar un hash?

La identificación se basa en tres pistas:

  • La longitud: cada algoritmo produce una huella de tamaño fijo.
  • El formato: hexadecimal puro, Base64, o Modular Crypt Format con prefijos específicos.
  • El prefijo: los hashes de contraseñas modernos siguen el formato $id$params$salt$hash, donde id identifica sin ambigüedad la función utilizada.

Longitudes hexadecimales habituales

  • 8 caracteres: CRC32 (suma de control, no es un hash criptográfico)
  • 32 caracteres: MD5, MD4, NTLM, RIPEMD-128
  • 40 caracteres: SHA-1, RIPEMD-160
  • 64 caracteres: SHA-256, SHA3-256
  • 96 caracteres: SHA-384, SHA3-384
  • 128 caracteres: SHA-512, SHA3-512, Whirlpool

Una longitud por sí sola no basta para concluir: MD5 y NTLM comparten el mismo tamaño de 32 caracteres hexa, por ejemplo. Nuestra herramienta devuelve entonces la lista de algoritmos posibles.

Prefijos Modular Crypt Format

Los hashes de contraseñas procedentes de crypt() o de bibliotecas modernas utilizan un prefijo explícito:

  • $1$: MD5 crypt
  • $5$: SHA-256 crypt
  • $6$: SHA-512 crypt
  • $2y$, $2a$, $2b$: Bcrypt (variantes según la plataforma)
  • $argon2i$, $argon2id$, $argon2d$: Argon2 (variantes de uso, siendo Argon2id el recomendado hoy en día)

Ejemplo de hash Bcrypt

$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy

Casos de uso

  • Análisis de filtraciones de datos: identificar el algoritmo utilizado por una base comprometida para evaluar la dificultad de ataque.
  • Depuración: confirmar rápidamente qué algoritmo ha generado una huella encontrada en una respuesta de API o en un log.
  • Auditoría de seguridad: detectar un sistema que aún almacena contraseñas en MD5 o SHA-1 (a proscribir).
  • Forense: caracterizar un artefacto en una investigación.

Por qué un hash no es reversible

Una función de hash está diseñada para ser de un solo sentido. No existe ningún algoritmo de "descifrado de hash", porque un hash no es un cifrado: es una proyección. Varias entradas distintas pueden producir, en teoría, el mismo hash (colisión), de modo que aun conociendo una entrada que produzca el hash correcto, no tiene la garantía de que sea la entrada original.

En la práctica, "romper" un hash significa probar masivamente entradas candidatas hasta encontrar aquella cuya huella coincida. Es lo que hacen los ataques por diccionario y por fuerza bruta.

Lookup en diccionario integrado

Nuestra herramienta integra un mini diccionario de 39 contraseñas ultracorrientes: cadena vacía, password, admin, 123456, qwerty, letmein, etc. Esas 39 entradas están precalculadas en 10 algoritmos (MD5, SHA-1, SHA-256, SHA-512, MD4, NTLM, etc.). Si su hash coincide con una de esas huellas, la herramienta le devuelve la contraseña en claro.

Esta funcionalidad ilustra por qué los hashes simples no son adecuados para las contraseñas: un atacante ni siquiera necesita calcular, basta con consultar una tabla.

Hash simple vs hash de contraseña

No todos los hashes valen para almacenar contraseñas:

  • Hashes simples (MD5, SHA-256, SHA-512): diseñados para ser rápidos, lo que es un defecto cuando se quiere resistir a un ataque por fuerza bruta. No incluyen sal por defecto, así que dos usuarios con la misma contraseña tendrán el mismo hash, exponiéndose a ataques por tablas precalculadas (rainbow tables).
  • Hashes de contraseña (bcrypt, scrypt, Argon2): diseñados para ser lentos por construcción, integran una sal aleatoria y un factor de coste configurable. Argon2id es hoy el estado del arte recomendado por OWASP.

Cómo utilizar la herramienta

  1. Pegue el hash en el campo de entrada.
  2. La herramienta detecta el formato (longitud, prefijo) y propone los algoritmos posibles.
  3. Si el hash corresponde a una contraseña ultracorriente, la palabra en claro se muestra.
  4. Si no, obtiene la lista de algoritmos candidatos para explorar más a fondo con una herramienta dedicada.

Preguntas frecuentes

¿Por qué mi hash bcrypt no se empareja con el diccionario?

Bcrypt utiliza una sal aleatoria única por hash: incluso con la contraseña password, cada usuario produce un hash distinto. El precálculo en diccionario, por tanto, no funciona. Es precisamente la propiedad que hace a bcrypt resistente a los ataques por tablas.

¿Qué hacer si varios algoritmos son posibles para la misma longitud?

Cruce con otras pistas: la fuente del hash (Active Directory apunta a NTLM, Linux /etc/shadow a SHA-512 crypt, una base MySQL antigua a MD5, etc.) y el contexto aplicativo. A igual longitud, MD5 sigue siendo estadísticamente el más probable en sistemas antiguos.

¿Cómo "romper" un hash en la práctica?

Para pruebas de seguridad legítimas (auditoría, pentest), las herramientas estándar son John the Ripper y hashcat. Aceptan wordlists masivas (rockyou, etc.) y aprovechan la GPU para probar miles de millones de candidatos por segundo. La viabilidad depende del algoritmo: MD5 y SHA-1 ceden rápido, bcrypt y Argon2 ralentizan el ataque varios órdenes de magnitud.

¿Se puede consultar el diccionario integrado?

El diccionario es deliberadamente minimalista (39 entradas) y sirve para ilustrar la debilidad de los hashes simples sobre contraseñas triviales. Para una cobertura seria, utilice una wordlist externa (rockyou, SecLists) con John the Ripper o hashcat.

¿Se puede "decodificar" un hash?

No. Un hash no es un cifrado: no existe función inversa. Cualquier sitio que prometa "decodificar un hash" aplica en realidad un lookup en una base precalculada. Si su contraseña es única y larga, no figura en ella.

Ejemplo de solicitud

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

Esquema de entrada

Campo Tipo Obligatorio Por defecto
hash text

Puntos de acceso

  • GET https://cdrn.fr/api/v1/tools - lista todas las herramientas disponibles
  • GET https://cdrn.fr/api/v1/tools/hash-identifier - recupera el esquema de esta herramienta
  • POST https://cdrn.fr/api/v1/tools/hash-identifier/execute - ejecuta esta herramienta con un payload JSON