Un hash no se deshace
El cifrado devuelve el texto en cuanto tienes la clave. Un hash no tiene esa clave: aplasta cualquier entrada, por larga que sea, en un único valor de longitud fija, y nada en ese valor permite recuperar el original.
Por eso los hashes responden a una sola pregunta: ¿son iguales estas dos cosas? ¿Coincide el archivo descargado con el valor que publicó el proveedor? ¿Coincide la contraseña recién escrita con la registrada? Si necesitas ocultar algo y volver a leerlo más tarde, lo que buscas es cifrado, no un hash.
Qué algoritmo elegir
- MD5 — un diseño de 1991. Fabricar dos entradas distintas con el mismo hash lleva segundos en un portátil. Sobrevive porque los proveedores siguen publicando sumas MD5 y hay que poder compararlas.
- SHA-1 — en 2017 se publicaron dos PDF que colisionan. No hay motivo para elegirlo en algo nuevo.
- SHA-256 — el valor por defecto de hoy: certificados, firmas y cadenas de bloques viven aquí.
- SHA-384 y SHA-512 — se apoyan en operaciones de 64 bits, así que en una máquina de 64 bits pueden ir más rápido que SHA-256. Elígelos cuando quieras un resumen más largo.
Para comprobar integridad basta con SHA-256. Si el proveedor solo publicó un MD5, compara con él, pero valora aparte si la descarga viene de un sitio fiable.
Para contraseñas hace falta más
Guardar una contraseña como SHA-256 es mejor que dejarla en claro, y sigue siendo mala idea. Las funciones de hash están hechas para ser rápidas, de modo que un atacante prueba miles de millones por segundo, y toda contraseña común ya está en una tabla.
Usa una función pensada para ser lenta: bcrypt, scrypt o Argon2. Permiten subir el coste de cálculo y añaden una sal distinta a cada usuario. No la escribas tú: tira de la que traiga tu lenguaje.
El mismo archivo con distinto resumen
Esta herramienta calcula el hash de los bytes UTF-8 de tu entrada. Cuando el resultado no coincide con el de una herramienta de línea de comandos, la diferencia casi siempre es invisible en pantalla.
- Fin de línea — el
\r\nde Windows y el\nde Unix son bytes distintos. - Un salto de línea final —
echoañade uno por defecto. Pruebaecho -noprintf. - Un BOM — algunos editores anteponen tres bytes al archivo.