Avatar ·

Hash seguro y sal para contraseñas en PHP

¡Hola a todos! Soy un desarrollador PHP principiante y estoy tratando de entender el almacenamiento seguro de contraseñas de usuarios. Actualmente uso MD5 con sal, pero me dijeron que no es seguro. Mi código actual se ve así: ```php function createPassword($password) { $salt = 'my_very_secret_salt_12345'; return md5($salt . $password); } function checkPassword($password, $hash) { $salt = 'my_very_secret_salt_12345'; return md5($salt . $password) === $hash; } ``` Entiendo que MD5 está obsoleto, pero no sé con qué reemplazarlo. He oído sobre bcrypt, password_hash y password_verify, pero no entiendo cómo usarlos correctamente. Preguntas principales: 1. ¿Cómo generar correctamente una sal para cada contraseña? 2. ¿Necesito almacenar la sal por separado y cómo pasarla al verificar? 3. ¿Qué algoritmos se consideran seguros actualmente en PHP? 4. ¿Cómo protegerse contra ataques de fuerza bruta (brute force) y tablas rainbow? Agradecería ejemplos de código detallados con explicaciones. Quiero entender no solo "cómo" hacerlo, sino también por qué ciertos métodos son mejores.