Si has descargado un programa y junto al enlace aparecía una cadena como e3b0c44298fc1c149afbf4c8996fb924…, eso era un hash. Los hashes están por todas partes: en Git, en las firmas de las APIs, en las claves de caché, en las contraseñas… Pero no todos sirven para lo mismo, y usar el equivocado puede abrir un agujero de seguridad.
Qué es una función hash
Una función hash toma un texto o archivo de cualquier tamaño y devuelve una huella de tamaño fijo. Tiene tres propiedades clave:
- Determinista: la misma entrada produce siempre el mismo hash.
- Efecto avalancha: cambiar un solo carácter cambia el hash por completo.
- Unidireccional: a partir del hash no se puede reconstruir la entrada.
Por ejemplo, el SHA-256 de hola y el de Hola no se parecen en nada, aunque solo cambie una mayúscula. Pruébalo en el generador de hash: calcula MD5, SHA-1 y SHA-256 a la vez, en tu navegador.
Las tres funciones, cara a cara
| MD5 | SHA-1 | SHA-256 | |
|---|---|---|---|
| Tamaño | 128 bits (32 caracteres hex) | 160 bits (40 hex) | 256 bits (64 hex) |
| Año | 1992 | 1995 | 2001 |
| Colisiones prácticas | Sí, desde 2004 | Sí, desde 2017 | No conocidas |
| ¿Seguro hoy? | No | No | Sí |
Una colisión es encontrar dos entradas distintas con el mismo hash. En MD5 se pueden generar en segundos con un ordenador normal; en SHA-1, Google y el CWI publicaron en 2017 la primera colisión práctica (el ataque «SHAttered»), con dos PDF distintos que daban el mismo hash. Para SHA-256 no se conoce ninguna.
Para qué sirve cada uno hoy
MD5: solo para detectar errores, nunca contra atacantes
MD5 sigue siendo útil para comprobar que un archivo no se ha corrompido por accidente (una descarga incompleta, un disco con errores) o para generar claves de caché y deduplicar datos. Es rápido y está en todas partes. Lo que no debes hacer es confiar en MD5 cuando alguien podría manipular el archivo a propósito: un atacante puede fabricar otro archivo con el mismo hash.
SHA-1: en retirada
Git usó SHA-1 durante años para identificar commits y está migrando a SHA-256. Los certificados TLS con SHA-1 dejaron de aceptarse hace tiempo. Si lo encuentras en un sistema heredado, planifica la migración; no lo elijas para nada nuevo.
SHA-256: la opción por defecto
Es el estándar actual para verificar descargas, firmar datos, calcular huellas de certificados o identificar contenido de forma única. Si necesitas «un hash» y no sabes cuál, elige SHA-256.
El error más grave: usar un hash para contraseñas
Ni MD5, ni SHA-1, ni siquiera SHA-256 son adecuados para guardar contraseñas. El problema no es que se puedan «descifrar», sino que son demasiado rápidos: una tarjeta gráfica actual calcula miles de millones de hashes por segundo, así que probar todas las contraseñas comunes contra una base de datos robada lleva minutos. Además, sin «sal», dos usuarios con la misma contraseña tienen el mismo hash y existen tablas precalculadas (rainbow tables) con millones de hashes de contraseñas habituales.
Para contraseñas se usan funciones lentas a propósito y con sal:
- Argon2id (la recomendación actual de OWASP)
- bcrypt
- scrypt
- PBKDF2, con muchas iteraciones, si necesitas cumplir FIPS
Y, por supuesto, la mejor defensa empieza por la propia contraseña: una larga y aleatoria, como las que crea el generador de contraseñas, resiste incluso si el hash se filtra.
Hash no es cifrado (ni Base64)
Tres conceptos que se confunden a menudo:
- Hash: unidireccional. No hay forma de volver atrás.
- Cifrado: bidireccional con una clave. Quien tenga la clave recupera el original.
- Codificación (Base64): bidireccional sin clave. Cualquiera puede decodificarla; solo cambia el formato. Puedes comprobarlo con el codificador Base64.
Si lo que quieres es comprobar que un mensaje viene de quien dice venir (por ejemplo, un webhook), no basta con un hash: necesitas un HMAC, que combina el hash con una clave secreta. El generador HMAC calcula firmas HMAC-SHA256 para verificar esas integraciones.
Resumen rápido
- ¿Comprobar que una descarga no está corrupta? SHA-256 (o MD5 si es lo único que publica el proveedor).
- ¿Clave de caché o deduplicación interna? MD5 o SHA-256, da igual.
- ¿Firmar o verificar mensajes entre sistemas? HMAC-SHA256.
- ¿Guardar contraseñas? Argon2id o bcrypt. Nunca MD5, SHA-1 ni SHA-256 a secas.

