Saltar al contenido
LeedyBox
Apoyar

Funciones hash explicadas

Una función hash convierte cualquier entrada en una huella corta y de longitud fija. Esta guía explica para qué sirven MD5, SHA-1 y SHA-256, dónde se quedan cortos y cómo comparar un archivo con una suma de verificación publicada.

Qué es un hash

Una función hash criptográfica lee datos de cualquier tamaño y produce un resumen (digest) de longitud fija: 128 bits en MD5, 160 bits en SHA-1 y 256 bits en SHA-256, que normalmente se muestran como texto hexadecimal. La misma entrada da siempre el mismo resumen, y cambiar un solo bit de la entrada produce un resumen muy distinto. Un hash es unidireccional: no se puede recuperar la entrada a partir del resumen, salvo adivinando entradas y comparando los resultados.

Esta guía ofrece información general. Para decisiones de seguridad, sigue los requisitos de tu organización o del servicio con el que trabajas.

Sumas de verificación e integridad

El uso cotidiano más habitual es comprobar que un archivo ha llegado intacto. Una página de descarga puede publicar un valor SHA-256 junto al archivo. Después de descargarlo, calculas el hash de tu copia y lo comparas con el publicado. Si los valores coinciden, es muy probable que el archivo sea idéntico a aquel cuyo hash calculó quien lo publicó; si difieren, la descarga está dañada o el archivo es otra versión.

Una suma de verificación solo sirve si el propio valor publicado es de confianza. Si un atacante puede cambiar tanto el archivo como la suma de verificación en la misma página, un hash coincidente demuestra poco. Las firmas digitales resuelven ese problema.

Por qué MD5 y SHA-1 no sirven para la seguridad

Un hash seguro debería hacer inviable en la práctica encontrar dos entradas distintas con el mismo resumen (una colisión). Se han publicado ataques de colisión prácticos tanto para MD5 como para SHA-1, así que un atacante puede preparar dos archivos distintos que compartan hash. Por ello, ya no se consideran adecuados para firmas digitales, certificados ni otros usos de seguridad.

MD5 y SHA-1 todavía pueden detectar daños accidentales, y algunos sistemas antiguos los publican. Para trabajos nuevos, SHA-256 u otro miembro de la familia SHA-2 (SHA-384, SHA-512) es la opción habitual.

AlgoritmoLongitud del resumenEstado de seguridad
MD5128 bits (32 caracteres hex)Roto frente a colisiones; solo para sumas de verificación heredadas
SHA-1160 bits (40 caracteres hex)Roto frente a colisiones; uso heredado
SHA-256256 bits (64 caracteres hex)Muy usado y recomendado
SHA-384 / SHA-512384 / 512 bitsMuy usados y recomendados

Un hash no es un cifrado, y las contraseñas necesitan más

El cifrado es reversible con la clave adecuada; el hash no está diseñado para invertirse. Sin embargo, un hash no oculta entradas cortas o predecibles: cualquiera puede calcular el hash de palabras comunes o números de teléfono y buscar una coincidencia.

Por eso los hashes rápidos como MD5 o SHA-256 por sí solos no son adecuados para almacenar contraseñas. Están diseñados para ser rápidos, lo que permite a un atacante probar muy deprisa un número muy grande de intentos. Para almacenar contraseñas se usan algoritmos lentos y con sal creados para ese fin, como Argon2, scrypt o bcrypt. Si creas un sistema de inicio de sesión, usa una biblioteca mantenida y las recomendaciones actuales de tu plataforma en lugar de un hash de uso general.

HMAC para autenticar mensajes

Un hash simple indica si los datos han cambiado, pero cualquiera puede volver a calcularlo. HMAC (código de autenticación de mensajes basado en hash) combina los datos con una clave secreta, por ejemplo HMAC-SHA256. Solo quien conoce la clave puede generar el valor correcto, así que el receptor puede comprobar que un mensaje procede de alguien que tiene la clave y que no se ha alterado. Los webhooks y la firma de solicitudes de API suelen usar HMAC. Mantén la clave en secreto; cualquiera que la tenga puede crear códigos válidos.

Por qué el mismo texto da un hash distinto

Un hash se calcula sobre bytes, no sobre el texto que ves. Estas diferencias cambian el resultado:

  • Finales de línea: Windows usa CR LF, mientras que Linux y macOS usan LF.
  • Codificación de caracteres: «é» son bytes distintos en UTF-8 y en codificaciones más antiguas.
  • Un salto de línea o un espacio al final, o una marca de orden de bytes (BOM) al principio de un archivo.
  • Mayúsculas o minúsculas en la entrada.

Cuando un hash no coincide, comprueba esto primero. Calcular el hash del archivo original suele ser más fiable que hacerlo con texto copiado de él. La salida hexadecimal en sí no distingue mayúsculas de minúsculas: A1B2 y a1b2 son el mismo valor.

Preguntas frecuentes

¿Puedo descifrar un hash MD5 o SHA-256?

No. Un hash no son datos cifrados. Los servicios en línea que dicen «descifrar» hashes buscan hashes precalculados de entradas comunes, y por eso los hashes de valores sencillos ofrecen poca protección.

¿Qué algoritmo debo usar para verificar una descarga?

Usa el que proporcione quien publica el archivo. Si se ofrecen varios, SHA-256 o SHA-512 son mejor opción que MD5 o SHA-1.

¿El Generador de hash sube mi archivo?

El Generador de hash de LeedyBox calcula los hashes en tu navegador, así que el texto o el archivo que seleccionas se procesa en tu dispositivo.