¿Qué es SHA-256? Cómo funciona, MD5 vs SHA-256 y checksums
SHA-256 es una función hash criptográfica que convierte cualquier entrada, desde una sola letra hasta un archivo de varios gigabytes, en un valor fijo de 256 bits, que normalmente se escribe como 64 caracteres hexadecimales. Pertenece a la familia SHA-2, que el NIST publicó en FIPS 180-2 en 2002. La misma entrada siempre produce el mismo hash, y a partir del hash no se puede recuperar la entrada.
Pruébalo gratis: Hash de texto en línea Gratis y sin necesidad de cuenta.
Entonces, ¿qué es SHA-256 en la práctica y para qué sirve? Sobre todo para demostrar que unos datos no han cambiado: los checksums de descargas, los certificados TLS, Git, Bitcoin y las peticiones firmadas a APIs dependen de él. Esta guía explica cómo funciona SHA-256, en qué se diferencian MD5 vs SHA-256, qué es un checksum y cómo verificar un checksum SHA-256 en Windows, macOS y Linux. Cada hash de este artículo se calculó con código y se comprobó dos veces. Para probar los ejemplos, pégalos en el generador de hash gratuito.
¿Qué es SHA-256?
SHA significa Secure Hash Algorithm (algoritmo de hash seguro). SHA-2 fue diseñado por la NSA y estandarizado por el NIST, primero en FIPS 180-2 (2002) y hoy en FIPS 180-4. La familia tiene varios miembros, con el nombre de su tamaño de salida: SHA-224, SHA-256, SHA-384 y SHA-512, además de SHA-512/224 y SHA-512/256. SHA-256 es el más utilizado.
Un hash funciona como una huella digital de los datos. Este es un ejemplo de hash SHA-256 para la palabra "hello" y para una entrada vacía:
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("") = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Los dos resultados tienen la misma longitud, porque la salida siempre es de 256 bits. Son 32 bytes y, como un dígito hexadecimal guarda 4 bits, hacen falta 256 ÷ 4 = 64 caracteres hexadecimales.
Cómo funciona SHA-256, en resumen
- Relleno. Al mensaje se le añade un bit 1, luego ceros y por último su longitud original como número de 64 bits, de modo que el total sea múltiplo de 512 bits.
- Bloques. El mensaje rellenado se divide en bloques de 512 bits.
- Compresión. Cada bloque pasa por 64 rondas de operaciones sencillas sobre palabras de 32 bits: rotaciones de bits, XOR, AND y suma módulo 2³². Estas rondas mezclan el bloque en un estado interno de ocho palabras de 32 bits (8 × 32 = 256 bits).
- Salida. Tras el último bloque, el estado es el hash.
Cada bloque modifica el estado con el que empieza el siguiente, así que un cambio en cualquier parte de la entrada afecta al resultado.
Propiedades clave de SHA-256
- Determinista. Los mismos bytes siempre dan el mismo hash, en cualquier ordenador.
- Tamaño fijo. Una palabra de 5 bytes y un archivo de 5 GB producen 64 caracteres hexadecimales.
- Efecto avalancha. Un cambio mínimo en la entrada cambia la salida por completo.
- Resistencia a preimagen. Dado un hash, no hay forma conocida de encontrar una entrada que coincida salvo adivinando.
- Resistencia a colisiones. Nadie ha encontrado nunca dos entradas distintas con el mismo hash SHA-256.
El efecto avalancha es fácil de ver. "hello" y "Hello" se diferencian en una letra, y las letras h (01101000) y H (01001000) solo se diferencian en un bit:
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("Hello") = 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
Los dos hashes difieren en 125 de sus 256 bits, cerca de la mitad que cabría esperar de una salida aleatoria, y en 61 de los 64 caracteres hexadecimales.
Un límite: la resistencia a preimagen protege datos impredecibles, no cadenas cortas y fáciles de adivinar. El hash de "hello" aparece en cualquier tabla de búsqueda en línea, porque cualquiera puede calcular el hash de palabras comunes y guardar los resultados.
¿Qué es un checksum?
Un checksum (suma de comprobación) es un valor corto que se calcula a partir de unos datos para saber más adelante si han cambiado. Los checksums sencillos como CRC32, que se usan en archivos ZIP y paquetes de red, detectan errores accidentales como una descarga defectuosa o un disco dañado, pero son fáciles de falsificar a propósito.
SHA-256 usado como checksum también protege contra la manipulación deliberada, porque nadie puede crear un archivo modificado que coincida con el valor original. Hay una condición: el hash esperado debe venir de una fuente de confianza, como el sitio HTTPS oficial del proyecto o un archivo de checksums firmado. Un atacante que controle la página de descarga puede cambiar el archivo y el hash publicado a la vez.
Dónde se usa SHA-256
- Descargas de software. Las distribuciones de Linux y muchas aplicaciones publican checksums SHA-256 de sus instaladores, a menudo en un archivo
SHA256SUMS. - Certificados TLS. El certificado que protege un sitio HTTPS está firmado sobre un hash SHA-256 en la mayoría de los casos, indicado como "sha256WithRSAEncryption" o "ecdsa-with-SHA256". Los principales navegadores dejaron de confiar en certificados firmados con SHA-1 en 2017.
- Bitcoin. Los mineros calculan el hash de las cabeceras de bloque aplicando SHA-256 dos veces (doble SHA-256) y cambian un número llamado nonce hasta que el resultado queda por debajo de un objetivo. Esa búsqueda es la prueba de trabajo.
- Git. Git identifica tradicionalmente los commits y archivos por su hash SHA-1. Desde la versión 2.29 (2020),
git init --object-format=sha256crea un repositorio que usa SHA-256 en su lugar. - HMAC-SHA256 y JWT. HMAC mezcla una clave secreta en el hash, de modo que solo quien tiene la clave puede generar un valor válido. Los webhooks y las peticiones a APIs se firman a menudo así, y el algoritmo JWT HS256 es HMAC con SHA-256; el generador HMAC lo calcula. No uses en su lugar un simple
SHA-256(key + message): es vulnerable a ataques de extensión de longitud, que HMAC evita.
MD5 vs SHA-256 (y SHA-1, SHA-512)
| Algoritmo | Salida | Caracteres hex | Publicado | Estado de seguridad |
|---|---|---|---|---|
| MD5 | 128 bits | 32 | 1992 (RFC 1321) | Roto: colisiones prácticas desde 2004 |
| SHA-1 | 160 bits | 40 | 1995 (FIPS 180-1) | Roto: primera colisión pública en 2017 |
| SHA-256 | 256 bits | 64 | 2002 (FIPS 180-2) | Seguro: sin colisiones conocidas |
| SHA-512 | 512 bits | 128 | 2002 (FIPS 180-2) | Seguro: sin colisiones conocidas |
La misma entrada con los cuatro:
MD5("hello") = 5d41402abc4b2a76b9719d911017c592
SHA-1("hello") = aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-512("hello") = 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
¿Qué es MD5? MD5 es un hash de 128 bits más antiguo, de 1992. En 2004, un equipo dirigido por Xiaoyun Wang mostró cómo construir dos entradas distintas con el mismo hash MD5, y trabajos posteriores hicieron que esas colisiones se calcularan rápidamente. MD5 no debe usarse donde alguien pueda fabricar a propósito un archivo que coincida.
SHA-1 resistió más tiempo. En febrero de 2017, el CWI de Ámsterdam y Google anunciaron SHAttered: dos archivos PDF distintos con el mismo hash SHA-1. El NIST recomienda sustituir SHA-1 por completo antes del 31 de diciembre de 2030.
SHA-256 no tiene ningún ataque práctico conocido. Una búsqueda de colisiones por fuerza bruta necesitaría unos 2¹²⁸ intentos, algo muy lejos del alcance de cualquier ordenador actual.
Así que, al elegir entre MD5 vs SHA-256, usa SHA-256 para todo lo relacionado con la seguridad. MD5 sigue sirviendo cuando nadie intenta engañarte, por ejemplo para detectar corrupción accidental o encontrar archivos duplicados en tu propio disco.
SHA-256 y SHA-512 son seguros; SHA-256 es la opción por defecto con más soporte. SHA-3 (FIPS 202, 2015) es un diseño distinto, estandarizado como alternativa y no porque SHA-2 estuviera roto.
Hash no es cifrado
El cifrado, como AES, es reversible: con la clave correcta recuperas los datos originales. Un hash no tiene clave ni vuelta atrás; siempre ocupa 256 bits por grande que sea la entrada, así que los datos originales no están en la salida. Las webs que dicen "descifrar SHA-256" solo buscan hashes de palabras y contraseñas comunes que calcularon de antemano.
Por qué SHA-256 a secas no sirve para contraseñas
SHA-256 está diseñado para ser rápido, y ese es justamente el problema con las contraseñas. Si se filtra una base de datos con hashes SHA-256 de contraseñas, los atacantes pueden probar miles de millones de intentos por segundo con tarjetas gráficas. Sin sal, además, dos usuarios con la misma contraseña obtienen el mismo hash.
Las contraseñas necesitan una función de hash lenta y con sal: Argon2id, scrypt o bcrypt (o PBKDF2 con muchas iteraciones). Hacen que cada intento sea costoso. Para conocer los detalles de la sal y qué pasa cuando se filtra una contraseña con hash, lee qué ocurre cuando se aplica hash a una contraseña.
Cómo verificar un checksum SHA-256
- Copia el valor SHA-256 esperado de la página oficial de descarga o del archivo de checksums.
- Calcula el hash del archivo que has descargado.
- Compara los 64 caracteres, no solo los primeros. En hexadecimal, mayúsculas y minúsculas dan igual.
Si los valores no coinciden, borra el archivo y vuelve a descargarlo de la fuente oficial.
Windows
En el Símbolo del sistema:
certutil -hashfile ubuntu.iso SHA256
Añade siempre SHA256: sin él, certutil usa SHA-1. En PowerShell, Get-FileHash usa SHA-256 por defecto y puede hacer la comparación por ti:
Get-FileHash .\ubuntu.iso
(Get-FileHash .\ubuntu.iso).Hash -eq "paste-the-expected-hash-here"
La segunda línea muestra True o False; -eq no distingue mayúsculas de minúsculas, así que la salida en mayúsculas coincide con un checksum en minúsculas.
macOS
shasum -a 256 ubuntu.iso
shasum -a 256 -c ubuntu.iso.sha256
La primera línea muestra el hash. La segunda lo compara con un archivo de checksums, que contiene el hash, dos espacios y el nombre del archivo.
Linux
sha256sum ubuntu.iso
sha256sum -c SHA256SUMS --ignore-missing
Con -c, sha256sum lee el archivo de checksums y muestra ubuntu.iso: OK o FAILED. --ignore-missing omite las entradas de archivos que no has descargado.
Una trampa habitual al calcular el hash de un texto en la terminal: echo "hello" | sha256sum da 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 y no el valor 2cf24d… de arriba, porque echo añade un salto de línea. Usa printf 'hello' | sha256sum para calcular el hash de exactamente cinco bytes.
En el navegador
El generador de hash MD5 y SHA-256 calcula MD5, SHA1, SHA224, SHA256, SHA384, SHA512, Keccak-256 y RIPEMD160 a la vez, en modo Texto o Archivo.
- Texto: calcula el hash exactamente de lo que escribes, en UTF-8, y un contador muestra el número de bytes, así que un espacio o un salto de línea de más se detecta enseguida.
- Archivo: el archivo se lee y se procesa localmente con la biblioteca crypto-js, sin subirlo.
- Verificar: pega el valor publicado en el campo «Hash esperado» y el algoritmo que coincide se marca con «Coincide». La comparación hexadecimal ignora mayúsculas, espacios y el prefijo
0x. - Salida: hexadecimal (en minúsculas o mayúsculas), Base64, Base64url o binario.
Dos límites: el archivo entero se carga primero en memoria, por lo que para ISO de varios gigabytes son mejor opción las herramientas de línea de comandos de arriba. Y la fila llamada SHA3 es Keccak-512 con el relleno original, que difiere de NIST SHA3-512.
Preguntas frecuentes
¿Se puede descifrar o revertir SHA-256?
No. SHA-256 es una función unidireccional sin clave. Los "descifradores de SHA-256" solo encuentran entradas que ya estaban en sus tablas de búsqueda, lo que funciona con palabras comunes y contraseñas débiles, pero no con datos aleatorios.
¿SHA-256 sigue siendo seguro?
Sí. No se conoce ningún ataque práctico de colisión ni de preimagen contra SHA-256, y el NIST lo sigue aprobando. Incluso un gran ordenador cuántico con el algoritmo de Grover, según lo que se sabe hoy, solo reduciría el esfuerzo de preimagen de unas 2²⁵⁶ a unas 2¹²⁸ operaciones.
¿Por qué un hash SHA-256 tiene 64 caracteres?
El hash tiene 256 bits. En hexadecimal, cada carácter representa 4 bits, así que 256 ÷ 4 = 64 caracteres. El mismo valor son 32 bytes, o 44 caracteres en Base64.
¿Cuál es la diferencia entre SHA-2 y SHA-256?
SHA-2 es la familia de funciones hash definida en FIPS 180-4. SHA-256 es uno de sus miembros, junto con SHA-224, SHA-384 y SHA-512. Cuando un programa dice "SHA-2" sin indicar tamaño, normalmente se refiere a SHA-256.
¿Pueden dos archivos tener el mismo hash SHA-256?
En teoría sí, porque hay infinitos archivos posibles y solo 2²⁵⁶ hashes posibles. En la práctica, nadie ha encontrado nunca dos entradas distintas con el mismo hash SHA-256, así que si los hashes coinciden se considera prueba de que los archivos son idénticos.
Pruébalo gratis: Hash de texto en línea Gratis y sin necesidad de cuenta.