Un hash (o función hash criptográfica) convierte cualquier dato en una “huella” de tamaño fijo que no se puede invertir: no hay forma de recuperar el contenido original a partir del hash. Se usa para verificar integridad, identificar contenido y, con las funciones adecuadas, para almacenar contraseñas de forma segura.
¿Qué es un hash?
Una función hash toma una entrada (texto, archivo, etc.) y produce una salida de longitud fija (por ejemplo 64 caracteres hexadecimales en SHA-256). Misma entrada → mismo hash siempre. Un cambio mínimo en la entrada cambia por completo el resultado. No existe una “clave” para “descifrar” el hash; por eso no sustituye al cifrado cuando necesitas recuperar el dato original.
Uso en integridad y firmas
- Verificación de archivos: descargas un archivo y su hash publicado (SHA-256). Calculas el hash del archivo descargado; si coincide, el archivo no se ha alterado en tránsito.
- APIs y caché: el hash del contenido sirve como ETag o identificador de versión para saber si algo cambió.
- Git, blockchain y protocolos: identifican commits, bloques o mensajes por su hash.
Aquí sí tiene sentido usar SHA-256, SHA-384 o SHA-512. Un generador de hash online te permite obtener el SHA de un texto o archivo para comparar con un valor esperado o documentar checksums.
Contraseñas: no uses solo SHA
Guardar la contraseña en texto plano es inaceptable. Guardar solo el hash SHA-256 de la contraseña tampoco es recomendable: las contraseñas débiles se pueden probar masivamente (rainbow tables, diccionarios). Para contraseñas se usan funciones lentas y con salt: bcrypt, Argon2 o scrypt. El salt es un valor aleatorio por usuario que evita que dos contraseñas iguales tengan el mismo hash y dificulta ataques masivos.
En resumen: usa hashes (SHA-256, etc.) para integridad, identificación y firmas; para contraseñas usa bcrypt, Argon2 o scrypt, nunca solo un hash rápido como SHA-256 sin salt ni iteraciones.