MD5 vs SHA-256 vs bcrypt: ¿Qué hash debería utilizar?
El hashing toma cualquier entrada y produce una "huella digital" de longitud fija que es prácticamente imposible de revertir. Está en todas partes: comprobaciones de integridad de archivos, firmas digitales, cadenas de bloques y almacenamiento de contraseñas. Pero MD5, SHA-256 y bcrypt están diseñados para trabajos muy diferentes, y usar el incorrecto (especialmente para contraseñas) es un error de seguridad común y grave. Aquí te explicamos cómo elegir correctamente.
Primero, qué garantiza una buena función hash
A cryptographic hash should be deterministic (same input, same output), fast to compute for legitimate use, and resistant to two attacks: finding the original input from the hash (preimage resistance), and finding two inputs with the same hash (collision resistance). Cuando una función hash "se rompe", generalmente significa que los investigadores encontraron una forma práctica de crear colisiones.
MD5: solo huellas dactilares rápidas
MD5 produce un hash de 32 caracteres (128 bits) y es muy rápido. El problema: ha estado criptográficamente roto desde mediados de la década de 2000; los ataques de colisión prácticos están bien documentados, por lo que nunca debe usarse para contraseñas, certificados o firmas. Todavía está bien para fines no relacionados con la seguridad, como claves de caché, deduplicación y sumas de verificación rápidas donde un atacante no tiene incentivos para falsificar una coincidencia. Genera uno con nuestro generador MD5.
SHA-256: integridad segura
SHA-256, parte de la familia SHA-2 estandarizada por NIST, produce un hash de 256 bits y sigue siendo resistente a colisiones sin ataques prácticos. Es el caballo de batalla detrás de los certificados TLS, la firma de software y Bitcoin. Úselo siempre que necesite verificar que los datos no hayan cambiado: descargas de archivos, integridad de documentos, firma de solicitudes de API. Pruebe el generador SHA-256 para verlo en acción.
bcrypt: the one for passwords
Aquí está la idea clave que hace tropezar a tantos desarrolladores: las contraseñas nunca deben ser codificadas con MD5 o SHA-256, precisamente porque son rápidas. La velocidad es excelente para las sumas de verificación, pero catastrófica para las contraseñas, porque permite a los atacantes probar miles de millones de conjeturas por segundo en una base de datos robada. bcrypt es deliberadamente lento e incluye un salt aleatorio incorporado, por lo que contraseñas idénticas producen hashes diferentes y la fuerza bruta se vuelve poco práctica. Su "factor de costo" le permite aumentar el trabajo a medida que el hardware se vuelve más rápido. Vea cómo funciona con nuestro generador de hash bcrypt. La Hoja de referencia para el almacenamiento de contraseñas de OWASP recomienda bcrypt (o Argon2/scrypt) exactamente por este motivo.
Quick reference
- MD5 → non-security fingerprints, cache keys, deduplication. Nunca por seguridad.
- SHA-256 → file integrity, signatures, certificates, blockchains.
- bcrypt (o Argon2/scrypt) → almacenamiento de contraseñas, siempre salado y lento.
Identifying an unknown hash
¿Heredaste una base de datos llena de hashes misteriosos? La longitud y el formato son pistas importantes: 32 caracteres hexadecimales generalmente significan MD5, 64 significa SHA-256 y una cadena que comienza con $2y$ es bcrypt. Nuestro identificador de hash puede reducirlo. Para conocer una historia más profunda sobre "por qué el hashing rápido falla en las contraseñas", consulte nuestra guía complementaria sobre creación de contraseñas seguras.
Conclusión
Haga coincidir la herramienta con el trabajo: MD5 para huellas dactilares triviales, SHA-256 para integridad y un algoritmo lento y salado como bcrypt para contraseñas. Elegir el incorrecto no es una preferencia de estilo: es la diferencia entre una vulneración de la base de datos contenida y una catastrófica.