Cómo almacenar con PHP contraseñas cifradas en base de datos MySQL para los usuarios de tu web

Tiempo de lectura: 2 minutos

Si tienes un sitio web, necesitas almacenar las contraseñas de los usuarios qué se registran de forma segura.

Si almacenamos las contraseñas en texto claro, estamos vulnerando la privacidad de los usuarios y dejamos una puerta abierta para que los hackers que entren al sistema puedan acceder a ellas.

Una forma sencilla de almacenar estas contraseñas es aplicar una función Hash.

Una función Hash es un algoritmo matemático de un solo sentido, es decir, que no se puede revertir. Todos los datos que cifremos utilizando un Hash no se podrán descifrar y tendrán el mismo número de caracteres.

Ejemplo:

Palabra: Perro
Función Hash: 33efffe3294

Palabra: Berro
Función Hash: 5f43a2aa94f

Como se puede observar en el ejemplo, la palabra Perro y la palabra Berro solo se diferencian en una letra y generan dos códigos Hash totalmente distintos (la lógica nos diría que cambiaría solo 1 carácter del Hash pero eso no ocurre). Esto quiere decir que no se podrá comparar palabras para intentar adivinar el siguiente Hash.

Lo interesante de todo esto es que almacenaremos contraseñas de un número grande o pequeño de dígitos, pero siempre devolverá el mismo tamaño de Hash.

Ahora te estarás preguntando ¿Cómo utilizamos todo esto?

Hay que entender el Hash cómo la matrícula (es único) de cada contraseña o palabras a las que se aplique. De esta manera lo que hay que hacer es lo siguiente.

Para guardar la contraseña:

  1. El usuario introduce su contraseña en texto claro.
  2. El sistema aplica una función Hash segura y genera la cadena Hash.
  3. El sistema almacena esta cadena Hash como la contraseña asociada al usuario.

Para identificarse en el sistema:

  1. El usuario introduce su contraseña en texto claro.
  2. El sistema aplica la misma función Hash que al almacenarla en el paso anterior.
  3. El sistema hace un select de la contraseña almacenada (cadena Hash) y la compara con el Hash generado.
  4. Si son iguales, ¡Bingo!, usuario autenticado en el sistema.

En PHP quedaría algo así:

<?php
$contra = "Perro";
$contraHash = hash('md5', $contra);
?>

En la línea $contraHash = hash('md5', $contra); se genera la cadena Hash utilizando md5, puedes utilizar distintos cifradores.

Puedes consultar los distintos cifradores disponibles en esta web: https://www.php.net/manual/es/function.hash.php

Ahora ya sabemos cómo almacenar de forma correcta las contraseñas de los usuarios que se registren.

Deja un comentario