Saltar al contenido principal

Generar hash

El generador de hash calcula MD5, SHA-1, SHA-256, SHA-384, SHA-512, CRC32 y HMAC en tu navegador. Cada resultado incluye el estado de seguridad del algoritmo, porque el dato más determinante sobre MD5 y SHA-1 es que ambos están rotos — y una herramienta que los ofrece sin decirlo es parte del problema.

Solo local
Salida
Entrada
0 B1 líneaLín. 1, Col. 1
Resúmenes
AlgoritmoEstadoResumenCopiar
MD5128inseguro…
SHA-1160inseguro…
SHA-256256actual…
SHA-384384actual…
SHA-512512actual…
CRC3232suma de comprobación…
Ninguno sirve para almacenar contraseñas. SHA-256 es rápido y permite a un atacante probar miles de millones de intentos. Usa bcrypt, scrypt o Argon2.

¿Cómo funciona Generar hash?

Un hash asigna cualquier entrada a un valor de longitud fija de modo que encontrar dos entradas con la misma salida debería ser inviable. “Debería ser” carga con mucho peso en esa frase, y qué algoritmos todavía lo cumplen es lo más útil que esta página puede decirte.

MD5 y SHA-1 están rotos, y no es teórico

Las colisiones de MD5 se pueden producir en un portátil en segundos, y se usaron en el mundo real: el malware Flame falsificó un certificado de firma de código de Microsoft con una colisión de MD5 en 2012. SHA-1 cayó en 2017 cuando Google y CWI produjeron dos PDF con el mismo digest, y desde entonces producirlo cuesta menos. Ninguno es aceptable para una firma, para la integridad frente a un adversario ni para deduplicar entradas que no controlas. Ambos valen como checksums sin función de seguridad, y ambos siguen estando por todas partes, que es la razón de que estén aquí.

Un hash no es un hash de contraseña

SHA-256 está diseñado para ser rápido — miles de millones de operaciones por segundo en una GPU —, y la velocidad es justo lo que no conviene para una contraseña, donde la defensa es ser lo bastante lento para que adivinar cueste más de lo que vale la contraseña. Guardar el SHA-256 de una contraseña, con sal o sin ella, significa que un atacante con la base de datos prueba la lista completa de contraseñas comunes en minutos. Las herramientas correctas son bcrypt, scrypt y Argon2, todas con un factor de coste deliberado. Nada en esta página es un hash de contraseña.

HMAC no es “calcular el hash de la clave y del mensaje”

La construcción obvia, H(key || message), está rota en cualquier hash de Merkle–Damgård — lo que incluye MD5, SHA-1 y SHA-256. Un atacante que conozca el digest y la longitud de la clave puede añadir datos y calcular un digest válido para el mensaje extendido sin ver jamás la clave. Es el ataque de extensión de longitud, y es la razón de que HMAC exista como primitiva aparte, con sus hashes interno y externo anidados. SHA-384 y SHA-512/256 son inmunes por construcción, por ser truncados.

La codificación de la entrada cambia el hash

El hash se define sobre bytes, no sobre caracteres, así que el digest de café depende de si el carácter acentuado son los dos bytes UTF-8 C3 A9 o el único byte Latin-1 E9. Esta página usa UTF-8 en todo, que es lo que significa cualquier sistema actual. Una firma que verifica localmente y falla en producción es muy a menudo esto.

CRC32 no es un hash en absoluto

Es un checksum de detección de errores diseñado para fallos de transmisión, y construir una colisión a propósito es trivial. Con solo 32 bits también colisiona por accidente tras unas 65,000 entradas, por la cota del cumpleaños. Correcto para detectar una descarga corrupta; equivocado para cualquier otra cosa.

Entrada

abc

Digests

MD5     900150983cd24fb0d6963f7d28e17f72   broken
SHA-1   a9993e364706816aba3e25717850c26c9cd0d89d  broken
SHA-256 ba7816bf8f01cfea414140de5dae2223b0…      current

¿Qué opciones y casos límite admite Generar hash?

Referencia técnica y opciones
ParámetroTipoValor predeterminadoComportamiento y casos límite
MD5128-bitrotoLas colisiones son prácticas en un portátil y se han usado en ataques reales. Válido como suma de comprobación no de seguridad; nunca para firmas, integridad frente a un adversario, o deduplicación de entrada no fiable.
SHA-1160-bitrotoSHAttered produjo una colisión real en 2017 y el coste ha bajado desde entonces. Navegadores y autoridades certificadoras lo han descartado. Git todavía lo usa para nombres de objetos, lo cual es una decisión de compatibilidad, no de seguridad.
SHA-256256-bitactualEl valor actual por defecto para integridad y firmas. No hay ataques prácticos. Rápido por diseño, por lo que es la elección equivocada para hashear una contraseña.
SHA-384384-bitactualSHA-512 truncado, lo que lo hace inmune al ataque de extensión de longitud que afecta a SHA-256. Se elige cuando esa propiedad importa.
SHA-512512-bitactualMás rápido que SHA-256 en hardware de 64 bits, a pesar de la salida más grande. Vale la pena preferirlo cuando la longitud extra no es un coste.
CRC3232-bitsuma de verificaciónUna suma de comprobación para detección de errores, no un hash. Fácil de falsificar deliberadamente y colisiona accidentalmente después de unas 65,000 entradas. Correcto para detectar una transferida corrupta e incorrecto para todo lo demás.
HMACcon clavesolo familia SHAUna construcción con clave que resiste la extensión de longitud, a diferencia de hashear una clave y un mensaje juntos. Ofrecido para los algoritmos SHA; MD5 y CRC32 se excluyen porque HMAC sobre un hash roto es un MAC roto.
Codificación de entradaUTF-8siempreEl hashing se define sobre bytes. El resumen del mismo texto difiere entre UTF-8 y Latin-1, lo que es una causa recurrente de firmas que verifican localmente y fallan en producción.
Salidahex o base64hexLos mismos bytes en dos representaciones. Hex es lo que imprimen las herramientas de línea de comandos; base64 es lo que transportan muchas cabeceras HTTP.

Preguntas frecuentes

¿Puedo usar esto para calcular el hash de contraseñas?

No — y es la respuesta más importante de la página. Todos los algoritmos de aquí están diseñados para ser rápidos, y la velocidad es justo lo que no quieres para una contraseña: un atacante con tu base de datos y una GPU prueba miles de millones de candidatos por segundo. Usa bcrypt, scrypt o Argon2, todos con un factor de coste ajustable que hace cara cada prueba. Añadir sal a un SHA-256 ayuda contra las tablas arcoíris y no hace nada contra un equipo de craqueo moderno.

¿De verdad está roto MD5 si todavía se usa por todas partes?

Las dos cosas son ciertas. Las colisiones son prácticas — puedes producir dos archivos con el mismo MD5 en un portátil —, y las colisiones de MD5 se usaron en un ataque real para falsificar un certificado de firma de código de Microsoft. Sigue por todas partes como checksum sin función de seguridad, en ETags y comprobaciones de integridad de archivos contra corrupción accidental, y ese uso está bien. Lo que no está bien es cualquier caso donde un adversario elige la entrada.

¿Por qué mi digest difiere del de otra herramienta?

Casi siempre es la entrada, no el algoritmo. Comprueba si hay un salto de línea al final — un archivo termina con uno y un cuadro de texto normalmente no, y un solo byte lo cambia todo. Después comprueba la codificación: esta página usa UTF-8, y una herramienta que use Latin-1 por defecto dará un digest distinto para cualquier carácter no ASCII. Por último, comprueba si la otra herramienta calculó el hash de los bytes del archivo o de su representación base64.

¿Para qué sirve HMAC?

Para demostrar que un mensaje vino de alguien que posee un secreto compartido y que no fue modificado. Es lo que firma el payload de un webhook, una petición de API y una cookie de sesión. La razón de que sea una primitiva distinta en vez de simplemente mezclar la clave con el mensaje es la extensión de longitud: con la mayoría de los hashes, conocer H(key || message) permite a un atacante calcular un digest válido para un mensaje más largo sin la clave. La construcción anidada de HMAC lo impide.

¿Qué SHA debo usar?

SHA-256, salvo que tengas una razón para usar otro — es el predeterminado en todas partes, está bien analizado y es suficientemente rápido. SHA-512 es genuinamente más rápido en hardware de 64 bits a pesar de su salida más larga. SHA-384 es SHA-512 truncado, lo que lo hace inmune a la extensión de longitud, y es la elección correcta si construyes algo que calcula el hash de un secreto directamente en lugar de usar HMAC.

¿Se sube mi entrada?

No. El hash SHA usa el SubtleCrypto integrado del navegador; MD5 y CRC32 están implementados en JavaScript en esta página porque SubtleCrypto se niega deliberadamente a implementar MD5. Nada sale de la pestaña, lo cual importa porque lo que se suele pasar por el hash son secretos de API, tokens y contenidos de archivos.