Hash seguro y sal para contraseñas en PHP: ¿cómo hacerlo correctamente?
Hola a todos. Soy un desarrollador PHP principiante y tengo un problema con el almacenamiento de contraseñas de usuarios. Actualmente uso md5() simple, pero leí que no es seguro. Intenté agregar una sal, pero no estoy seguro de hacerlo correctamente.
Aquí está mi código actual para el registro:
```php
$password = $_POST['password'];
$salt = 'my_secret_salt';
$hashed_password = md5($salt . $password);
// guardo $hashed_password en la BD
```
Y para la verificación en el login:
```php
$password = $_POST['password'];
$salt = 'my_secret_salt';
$hashed_password = md5($salt . $password);
// comparo con lo que está en la BD
```
Problemas que veo:
1. La sal es estática — si se descubre, todas las contraseñas están comprometidas.
2. md5() es demasiado rápido, es fácil de adivinar.
3. No hay protección contra ataques de tiempo (timing attack).
¿Podrían indicarme cómo implementar correctamente el hash de contraseñas en PHP? ¿Qué funciones debo usar? ¿Es necesario generar una sal única para cada usuario y dónde almacenarla? Les agradeceré.