Guía rápida: Hashing (sin enredos)
Esa huella (hash) sirve para verificar, comparar, detectar cambios y (en seguridad) guardar contraseñas bien
Cuando escuchas “hash”, casi siempre se trata de esto:
Hashing = convertir cualquier dato en una “huella digital” de tamaño fijo.
Esa huella (hash) sirve para verificar, comparar, detectar cambios y (en seguridad) guardar contraseñas bien.
1) ¿Qué es un hash en palabras simples?
Tomas un dato:
-
una contraseña:
"MiClave123" -
un archivo
-
un texto
-
una imagen
-
lo que sea…
Y lo pasas por una función hash (por ejemplo SHA-256).
Resultado: una cadena “rara” de longitud fija, tipo:
e3b0c44298fc1c149afbf4c8996fb924...
Lo importante:
-
Si el dato cambia aunque sea una letra, el hash cambia muchísimo.
-
El hash tiene tamaño fijo, aunque el dato sea enorme.
2) Propiedades clave (lo que debes recordar)
Determinista
Mismo input → mismo hash.
Cambio mínimo, cambio total (efecto avalancha)
Si cambias una letra → hash completamente distinto.
Unidireccional (en teoría)
Desde el hash, no “regresas” al texto original fácilmente.
Resistencia a colisiones
Idealmente, es muy difícil que dos inputs diferentes den el mismo hash.
3) ¿Para qué se usa hashing?
A) Verificar integridad (archivos)
Ejemplo: descargas un instalador y el sitio te da el SHA-256.
Tú calculas el tuyo y comparas.
Si coinciden → el archivo no fue alterado.
B) Guardar contraseñas (bien hecho)
Nunca deberías guardar contraseñas en texto plano.
Se guardan como hash… pero ojo: con sal (salt) y algoritmos correctos (más abajo).
C) Firmas digitales y seguridad (parte del sistema)
Hashing se usa dentro de:
-
firmas digitales
-
certificados
-
blockchain
-
detección de modificaciones
D) Comparaciones rápidas
Comparar hashes suele ser más rápido que comparar contenido largo.
4) Hashing NO es lo mismo que cifrado
Esto lo confunde mucha audiencia:
Cifrado (encryption)
-
Tiene ida y vuelta.
-
Si tienes la clave, puedes recuperar el original.
Hashing
-
Es un “resumen/huella”.
-
No se supone que puedas recuperar el original.
5) Hashing NO es lo mismo que encoding
Encoding (Base64) no protege nada, solo cambia formato.
-
Base64 es reversible siempre.
-
Hash no está pensado para ser reversible.
6) Algoritmos hash más comunes (y cuáles evitar)
Para integridad / uso general:
-
SHA-256
-
SHA-512
Evitar para seguridad moderna:
-
MD5 (rápido y con colisiones conocidas)
-
SHA-1 (ya no se considera seguro para muchas cosas)
Para contraseñas (lo correcto):
-
bcrypt
-
scrypt
-
Argon2 (muy recomendado hoy)
Por qué? Porque son lentos a propósito y frenan ataques de fuerza bruta.
7) El truco que mucha audiencia olvida: SALT (sal)
Si tú haces hash directo de contraseñas:
hash("123456")
muchas personas tendrán el mismo hash si usan la misma contraseña.
Y existen tablas (rainbow tables) para adivinar hashes comunes.
Por eso se usa salt:
hash(salt + password)
Cada usuario tiene un salt distinto.
Así, aunque dos usuarios tengan “123456”, sus hashes quedan diferentes.
8) Ejemplo mental rápido (sin código)
Si el archivo foto.png tiene hash:
A1B2C3...
y alguien le cambia 1 píxel, su hash pasa a:
F9E8D7...
Por eso hashing es tan eficiente para detectar cambios.
9) Errores típicos de estudiantes (y cómo evitarlos)
❌ “Guardar contraseñas con SHA-256 y ya”
No. Para contraseñas usa bcrypt/scrypt/Argon2 + salt.
❌ “Si tengo el hash, puedo sacar la contraseña”
No directamente. Lo que se hace es:
-
probar miles de contraseñas → hashearlas → comparar hashes (ataque de fuerza bruta)
❌ “MD5 sirve porque es rápido”
Precisamente por rápido es peligroso en contraseñas.