Cómo generar hashes MD5, SHA-256 y otros

· 9 min de lectura

El hashing convierte cualquier entrada (una contraseña, un archivo, un mensaje) en una cadena de caracteres de longitud fija. La misma entrada siempre produce el mismo hash, pero hasta un cambio diminuto en la entrada produce un hash completamente distinto. Esto hace que el hashing sea esencial para verificación de integridad, almacenamiento de contraseñas, firmas digitales, pruebas blockchain y docenas de otros bloques de construcción de la computación moderna. Elegir el algoritmo correcto, saber por qué algunos están rotos, y reconocer los patrones que mal usan los hashes convierte una herramienta de cinco segundos en una base sobre la que puedes construir con seguridad.

Breve historia de las funciones hash

El hashing como idea de programación precede a la criptografía por décadas, las tablas hash en estructuras de datos usan funciones simples como CRC y FNV para repartir claves entre buckets. Los hashes criptográficos, diseñados para ser irreversibles y resistentes a colisiones, emergieron a finales de los 80 con MD4 (1990) y MD5 (1991) de Ron Rivest. MD5 se convirtió en el estándar de facto durante dos décadas antes de que colisiones prácticas lo hicieran inseguro para trabajo de seguridad.

El SHA-0 (1993) de NIST se retiró casi inmediatamente y se reemplazó por SHA-1 (1995). SHA-1 aguantó mejor pero cayó por etapas: ataques teóricos en 2005, un escenario práctico de falsificación de certificado para 2009, y la demostración SHAttered de Google de dos PDF distintos con el mismo hash SHA-1 en 2017. La familia SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512), publicada en 2001, se diseñó como reemplazo a más largo plazo y sigue siendo segura hoy. SHA-3 (Keccak, estandarizado en 2015) es un diseño estructuralmente diferente pensado para proporcionar respaldo si SHA-2 cae alguna vez.

En paralelo, los hashes específicos para contraseñas evolucionaron por separado. MD5 o SHA-1 simples resultaron demasiado rápidos para almacenamiento de contraseñas, así que bcrypt (1999), scrypt (2009), y Argon2 (2015, ganador de la Password Hashing Competition) añadieron lentitud deliberada y dureza de memoria para hacer los ataques de fuerza bruta órdenes de magnitud más caros. El hash correcto para una contraseña nunca es el mismo que el hash correcto para una suma de comprobación de archivo.

Cómo funciona el hashing

Una función hash toma una entrada de cualquier tamaño y produce una salida de tamaño fijo:

EntradaHash SHA-256 (primeros 16 car.)
hello2cf24dba5fb0a30e...
Hello185f8db32271fe25...
hello!ce06092fb948d9ff...

Nota que cambiar un solo carácter (h minúscula a H mayúscula) o añadir un carácter cambia completamente el hash. Esto se llama el efecto avalancha y es lo que hace útil al hashing para detectar cualquier cambio, por diminuto que sea.

Internamente, una función hash moderna divide su entrada en bloques de tamaño fijo (64 bytes para SHA-256, 128 para SHA-512), pasa cada bloque por una función de compresión y encadena el estado hacia adelante. La salida es el estado final tras incorporar el último bloque. Como la cadena depende de cada byte, no hay atajo que permita a un atacante cambiar la entrada sin reescribir todo el hash.

Un buen hash criptográfico tiene tres propiedades de seguridad: resistencia a la preimagen (no puedes encontrar una entrada que produzca un hash dado), resistencia a la segunda preimagen (dada una entrada, no puedes encontrar una distinta con el mismo hash), y resistencia a colisiones (no puedes encontrar dos entradas distintas con el mismo hash). MD5 falla las tres; SHA-1 falla la resistencia a colisiones; SHA-2 y SHA-3 aún mantienen las tres.

Algoritmos hash comunes

AlgoritmoBits de salidaLongitudEstadoUsar para
MD512832 hexRoto (inseguro)Sumas de comprobación heredadas, usos no de seguridad
SHA-116040 hexRoto (inseguro)Sistemas heredados únicamente
SHA-22422456 hexSeguro (de nicho)Preferir SHA-256
SHA-25625664 hexSeguroIntegridad de archivo, firmas digitales
SHA-38438496 hexSeguroSuites de cifrado TLS 1.3
SHA-512512128 hexSeguroApps de alta seguridad, rendimiento en 64 bits
SHA3-25625664 hexSeguroAlternativa a prueba de futuro de SHA-256
BLAKE2b / BLAKE3256 o 512variableSeguro, muy rápidorsync, restic, hashing masivo
HMAC-SHA25625664 hexSeguroFirma de peticiones API
bcrypt18460 car. (personalizados)Seguro para contraseñasAlmacenamiento de contraseñas
Argon2idconfigurablevariableEl mejor para contraseñasAlmacenamiento moderno de contraseñas
CRC32328 hexSolo detección de errorNo es un hash de seguridad

SHA-256 es el estándar actual para la mayoría de usos generales. MD5 y SHA-1 solo deberían usarse al interactuar con sistemas heredados que los requieran; nunca para límites de seguridad. Para contraseñas, usa bcrypt o Argon2id, no SHA-256 crudo.

Cómo generar un hash

  1. Elige tu algoritmo: selecciona MD5, SHA-1, SHA-256, SHA-384 o SHA-512 en el desplegable. Usa SHA-256 a menos que tengas una razón específica para elegir otro.
  2. Introduce texto o sube un archivo: escribe o pega texto en la caja de entrada, o arrastra un archivo. La herramienta ejecuta el hash enteramente en tu navegador usando la API Web Crypto.
  3. Copia el hash: el resultado es una cadena hex que puedes usar para verificación, almacenamiento o comparación. Muchas herramientas también ofrecen codificación base64 para almacenamiento compacto.
  4. Compara si es necesario: pega el hash publicado junto al hash generado y deja que la herramienta marque el primer carácter que difiera. Comparar cadenas de 64 caracteres a ojo es propenso a errores.

Usos prácticos

Verificación de integridad de archivo: descarga un archivo y compara su hash con el hash oficial del editor. Si coinciden, el archivo es auténtico y no está corrupto. Este es el caso de uso que motiva la mayoría de generaciones diarias de hash, el flujo detrás de cada invocación de sha256sum en Linux y cada página de checksums en una descarga de software.

Almacenamiento de contraseñas, las aplicaciones almacenan hashes de contraseñas, no las contraseñas mismas. Cuando inicias sesión, tu entrada se hashea y se compara con el hash almacenado. El detalle crucial es que el algoritmo debe ser lento a propósito (bcrypt, Argon2) para que un atacante que robe el archivo de hashes no pueda forzarlo en un tiempo razonable.

Deduplicación de datos: los sistemas de almacenamiento y herramientas de respaldo hashean trozos de datos, a menudo bloques de unos pocos megabytes, y usan el hash como clave. Se asume que dos trozos con el mismo hash son idénticos, así que la segunda ocurrencia solo guarda un puntero. Herramientas como restic, borg y muchos servicios de respaldo en la nube dependen de esto.

Firmas digitales: una firma digital es un hash cifrado con una clave privada. El verificador hashea el documento, descifra la firma con la clave pública, y comprueba que ambos coincidan. Esto prueba tanto que el documento no ha cambiado como que el firmante aprobó esta versión exacta.

HMAC para seguridad de API: HMAC combina una función hash con una clave secreta, produciendo una etiqueta que cualquiera con la misma clave puede verificar. Webhooks, firma de peticiones AWS, y muchas RPC internas usan HMAC-SHA256 para que el receptor sepa que la petición realmente vino de una fuente confiable.

Blockchain y árboles Merkle: las criptomonedas, el almacenamiento direccionable por contenido (IPFS), y Git usan todos árboles hash para comprometerse con grandes conjuntos de datos con un solo hash raíz. Cambia un byte en cualquier parte del árbol, y el hash raíz cambia, esa es la propiedad que hace los datos a prueba de manipulación.

Claves de caché: los sistemas de caché hashean URLs de petición o parámetros de consulta para producir una clave de búsqueda compacta. CRC y SipHash son comunes aquí porque priorizan velocidad sobre garantías criptográficas.

Hash vs HMAC vs firma digital

Estos tres conceptos se confunden a menudo porque todos producen cadenas hex de aspecto similar.

ConceptoEntradasVerificaUso común
HashDatosLos datos no han cambiado desde que se calculó el hashSumas de comprobación, direccionamiento por contenido
HMACDatos + secreto compartidoDatos sin cambios Y creados por alguien con el secretoFirma de peticiones API, webhooks
Firma digitalDatos + clave privadaDatos sin cambios Y firmados por una clave específicaCertificados TLS, firma de software
CifradoDatos + clave (cualquiera)Los datos se mantuvieron secretos en tránsitoConfidencialidad (no integridad sola)

Un hash crudo no prueba nada sobre quién lo creó. HMAC prueba que el emisor tenía el secreto compartido. Una firma identifica adicionalmente al firmante sin necesidad de compartir el secreto. Elige la herramienta más débil que resuelva tu problema real.

Errores comunes

Herramientas y bibliotecas alternativas

El generador de hash del navegador es el camino más rápido para hashes puntuales. Para uso repetido o scripts, las herramientas de línea de comandos y bibliotecas de lenguaje toman el relevo.

HerramientaPlataformaFortalezaA tener en cuenta
Generador de hash webNavegadorInstantáneo, sin instalación, sin subidaUna entrada a la vez
sha256sum, md5sumLinuxScriptable, GNU coreutils--check lee archivos SHA256SUMS
shasum -a 256macOS, BSDIncluido en el SONombre de binario distinto al de Linux
Get-FileHashWindows PowerShellDe primera clase en WindowsFormato de salida difiere de sha256sum
openssl dgst -sha256MultiplataformaSi ya tienes OpenSSLMás lento que herramientas dedicadas
b3sum / BLAKE3 CLIMultiplataformaRendimiento multi-GB/sMás nuevo, menos omnipresente
Python hashlibPythonIncorporado, todos los algoritmos mayoresQuédate con entrada en bytes
Node cryptoNode.jsIncorporado, API similar a PythonStreaming para archivos grandes
Web Crypto subtle.digestJS de navegadorNativo, rápido, sin dependenciasSolo API asíncrona
HashiCorp Vault / KMSNubeGestión centralizada de claves para HMAC y firmaBloqueo de proveedor

Para contraseñas, trata al ecosistema del lenguaje de forma distinta: usa bcrypt, argon2-cffi, passlib, o el adaptador recomendado por tu plataforma, nunca un bucle SHA artesanal.

Privacidad y el generador de hash

El generador de hash corre enteramente en tu navegador. El texto que escribes se hashea en memoria con la interfaz SubtleCrypto de Web Crypto, y cualquier archivo que selecciones se transmite por la API FileReader sin subida. No hay registro de qué entradas se hashearon, ni analítica sobre qué algoritmos son populares, ni manera de que nadie reconstruya lo que estabas verificando. Los hashes mismos a menudo resumen material sensible, contraseñas, documentos internos, claves privadas, exactamente el tipo de dato que nunca deberías pegar en un formulario web ajeno. Hacer el trabajo del lado del cliente mantiene la entrada en tu máquina, donde pertenece. Para una tarea tan rutinaria como generar una suma de comprobación, el ajuste de privacidad por defecto debería ser: nada sale de la página, nada se almacena, nada se comparte.

Preguntas frecuentes

¿Cuál es la diferencia entre MD5, SHA-1 y SHA-256?

MD5 produce un hash de 128 bits (32 caracteres hex), SHA-1 produce 160 bits (40 caracteres) y SHA-256 produce 256 bits (64 caracteres). MD5 y SHA-1 se consideran criptográficamente rotos. SHA-256 es actualmente seguro y se recomienda para la verificación de integridad y la seguridad.

¿Se puede invertir un hash para recuperar los datos originales?

No. Las funciones hash son de una sola dirección por diseño. No puedes invertir matemáticamente un hash hacia su entrada. En cambio, las contraseñas habituales pueden encontrarse en tablas precalculadas (rainbow tables), de ahí la importancia de salinizar las contraseñas antes del hashing.

¿Qué es HMAC?

HMAC (Hash-based Message Authentication Code) combina una función hash con una clave secreta. Verifica a la vez la integridad y la autenticidad de los datos, demostrando que no se han alterado y que los ha producido alguien que conoce la clave secreta.

¿Se envían mis datos a un servidor?

No. Todo el hashing se ejecuta en tu navegador con la API Web Crypto. Tus textos y archivos nunca salen de tu dispositivo.

Why should I never use MD5 or SHA-1 for password storage even with a salt?

Both algorithms are extremely fast, which is the opposite of what you want for passwords. An attacker with a stolen hash file can try billions of guesses per second on a GPU. Password-hashing functions like bcrypt, scrypt, and Argon2 are deliberately slow and memory-hard, which forces attackers to spend orders of magnitude more time per guess.

When should I use SHA-512 instead of SHA-256?

On 64-bit CPUs, SHA-512 is often slightly faster than SHA-256 because its inner state and word size are tuned to 64-bit operations. Use SHA-512 when you want a longer digest (128 hex characters) for collision resistance margin, or when you are already in a SHA-512 ecosystem (TLS 1.3 with certain cipher suites, some HMAC implementations).