${ error }
${ texto === '' ? 'Sin texto: estos son los hashes de un texto vacío.' : bytesEntrada.toLocaleString('es-ES') + (bytesEntrada === 1 ? ' byte' : ' bytes') }
${ g.nombre }
${ a.nombre } ${ formateados[a.id] }

${ identificacion.texto }

¿Qué es un hash?

Un hash es una huella de un texto o de un archivo: un número de tamaño fijo que se calcula a partir de su contenido. El mismo texto da siempre el mismo hash, y si cambia una sola letra el hash cambia por completo. En los algoritmos criptográficos, además, no se puede volver atrás: con el hash no se puede saber el texto, salvo probando textos hasta dar con él.

Cada algoritmo da un hash distinto y de una longitud distinta. Aquí los tienes todos a la vez, agrupados por familias, para comparar con el que te ha dado un programa o una API.

Las familias de algoritmos

  • SHA-2 (SHA-224, SHA-256, SHA-384 y SHA-512): el estándar más usado hoy. SHA-256 está en los certificados SSL, en las imágenes de Docker, en Bitcoin y en las firmas de las API.
  • SHA-3: el estándar más reciente (2015), con un diseño interno distinto al de SHA-2, por si algún día se encontrara un fallo en este.
  • Keccak: el algoritmo que ganó el concurso de SHA-3, tal como era antes de estandarizarlo. Da otro resultado que SHA-3 porque cambia un detalle del relleno. Keccak-256 es el hash de Ethereum: con él se calculan las direcciones y las firmas de las funciones de los contratos.
  • BLAKE2 y BLAKE3: tan seguros como SHA-2 y más rápidos. BLAKE2b lo usan, por ejemplo, Argon2 y la librería libsodium.
  • MD5 y SHA-1: los clásicos, que todavía se ven en sistemas antiguos. Ya no son seguros: se pueden fabricar dos textos con el mismo hash. MD4 es aún más antiguo, y es la base de los hashes NTLM de Windows.
  • RIPEMD-160, Whirlpool y SM3: RIPEMD-160 se usa en las direcciones de Bitcoin; Whirlpool, en algunos programas de cifrado como VeraCrypt; y SM3 es el estándar de hash de China.
  • Sumas de control (CRC32, CRC32C, CRC64, Adler-32 y xxHash): muy rápidas y cortas, pensadas para detectar errores en datos o archivos, no para la seguridad. Cualquiera puede fabricar un texto con la suma que quiera. CRC32 está en los ZIP y en Ethernet; Adler-32, en zlib y PNG.

¿Por qué mi hash no coincide?

Casi siempre es porque el texto no es exactamente el mismo:

  • Un salto de línea al final. echo "hola" | sha256sum calcula el hash de «hola» más un salto de línea. Para que coincida con el de aquí, usa echo -n o printf '%s'.
  • Saltos de línea de Windows. En Windows cada línea acaba en dos caracteres (\r\n) y aquí, en uno (\n).
  • La codificación. Aquí el texto se pasa a bytes en UTF-8. Si un programa usa Latin-1 o UTF-16, las letras con tilde, la ñ y los emojis dan otros bytes y otro hash.
  • Espacios al principio o al final que no se ven.
  • Bytes en vez de texto. Si lo que te dan es una clave o un dato binario en hexadecimal o en Base64, elige ese formato arriba: no es lo mismo el hash del texto «48656c6c6f» que el de los bytes que representa.

¿Cómo sé de qué algoritmo es un hash?

Por su longitud se descartan muchos: 32 caracteres hexadecimales son 128 bits (MD5, MD4 o XXH128), 40 son 160 bits (SHA-1 o RIPEMD-160) y 64 son 256 bits (SHA-256, SHA3-256, Keccak-256, BLAKE2s, BLAKE3…). Pero varios algoritmos dan la misma longitud, y el hash por sí solo no dice cuál es. Si tienes también el texto original, escríbelo arriba y pega el hash abajo: si es el de ese texto con alguno de los 30 algoritmos, te diremos con cuál.

Para guardar contraseñas no se usa ninguno de estos: son demasiado rápidos y se pueden probar miles de millones por segundo. Para eso están Argon2 y bcrypt. Y para el hash de un archivo, tienes el hash de un archivo.

Copiado al portapapeles.