Generador de Hash

Genera hashes SHA-1, SHA-256 y SHA-512 a partir de texto.

Tres hashes, un clic

Introduce cualquier texto y la herramienta calcula sus resúmenes SHA-1, SHA-256 y SHA-512 simultáneamente usando la Web Crypto API integrada del navegador: la misma implementación auditada en la que se apoya TLS, no una reimplementación en JavaScript. Cada resultado se muestra en hex minúscula; pulsa cualquier hash para copiarlo.

Ejemplo: el SHA-256 de Hello World:

a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

Cambia un solo carácter (Hello world, con w minúscula) y cada bit de la salida se reordena: ese es el efecto avalancha, y es la razón por la que los hashes funcionan como huellas dactilares.

Elegir un algoritmo

AlgoritmoSalidaEstadoÚsalo para
SHA-1160 bit / 40 caracteres hexRoto para colisiones (2017)Solo compatibilidad heredada: IDs de objetos git, sumas de verificación antiguas
SHA-256256 bit / 64 caracteres hexSeguro, estándar del sectorIntegridad de archivos, firmas, huellas dactilares generales
SHA-512512 bit / 128 caracteres hexSeguroMargen extra; a menudo más rápido que SHA-256 en CPU de 64 bits

Por defecto usa SHA-256 salvo que algo te obligue a otra cosa. Se han demostrado en la práctica colisiones de SHA-1 (dos entradas distintas que producen el mismo hash), así que nunca lo uses donde un atacante pudiera beneficiarse de falsificar una coincidencia. MD5 está aún más superado y por eso no se ofrece aquí.

Para qué sirven los hashes, y para qué no

  • Comprobaciones de integridad: compara el SHA-256 publicado de un archivo descargado con tu propio cálculo; una coincidencia demuestra que los bytes son idénticos.
  • Deduplicación y claves de caché: haz el hash del contenido y usa el resumen como ID.
  • Direccionamiento por commit y por contenido: git, IPFS y los registros de contenedores identifican todos el contenido por hash.
  • No es cifrado: el hash es unidireccional; no hay clave ni descifrado. No puedes recuperar la entrada a partir del resumen.
  • No para contraseñas, ni siquiera SHA-256: los hashes simples calculan miles de millones de intentos por segundo en una GPU. El almacenamiento de contraseñas necesita un algoritmo deliberadamente lento y con sal: bcrypt, scrypt o Argon2. Si necesitas una contraseña fuerte, usa el generador de contraseñas.

Determinista, local, privado

La misma entrada siempre produce el mismo resumen: ese determinismo es todo el objetivo, y también significa que cualquier cosa adivinable (un número de teléfono, una palabra del diccionario) puede revertirse mediante tablas de búsqueda por fuerza bruta, que es justo por lo que los hashes sin sal fallan para las contraseñas. Todo el cálculo de hashes aquí corre por completo en tu navegador mediante crypto.subtle.digest(); el texto que introduces nunca sale de tu equipo. Para identificadores aleatorios en lugar de huellas de contenido, usa el generador de UUID.

Preguntas frecuentes

¿Qué algoritmos de hash se admiten?
SHA-1, SHA-256 y SHA-512, todos calculados a la vez mediante la Web Crypto API del navegador. SHA-256 es el valor por defecto recomendado; SHA-1 se incluye solo por compatibilidad heredada.
¿Puedo revertir un hash para obtener el texto original?
No. Los hashes criptográficos son funciones unidireccionales. La única "reversión" es adivinar entradas y comparar resúmenes, lo que funciona para entradas cortas o comunes: una razón más para no hacer nunca el hash de contraseñas sin sal y un algoritmo lento.
¿Por qué no hay opción de MD5?
MD5 lleva dos décadas criptográficamente roto (se pueden generar colisiones en segundos) y la Web Crypto API deliberadamente no lo implementa. Para cualquier uso nuevo, SHA-256 es la elección correcta.
¿SHA-256 es seguro para almacenar contraseñas?
Por sí solo, no. Los hashes rápidos permiten miles de millones de intentos por segundo en GPU. Usa un algoritmo dedicado al hash de contraseñas (bcrypt, scrypt o Argon2) que añade sal y un factor de trabajo ajustable.
¿Se envía mi texto a algún sitio al calcular el hash?
No. El cálculo del hash corre por completo en tu navegador mediante crypto.subtle.digest(); la entrada nunca sale de tu dispositivo.