sql >> Base de Datos >  >> RDS >> Mysql

Crypt () generación de sal y cifrado de contraseña, ¿bien ejecutado?

Hay algunos puntos que se pueden mejorar, pero primero recomendaría usar la nueva función de PHP contraseña_hash() . Esta función generará una sal segura y la incluirá en el valor hash resultante, para que pueda almacenarla en un solo campo de base de datos. También existe un paquete de compatibilidad para versiones anteriores.

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

Algunas reflexiones sobre su código:

  1. Usted genera un hash BCrypt con crypt(), por lo que la sal será parte del hash resultante. No es necesario almacenarlo por separado.
  2. La generación de la sal se puede mejorar, use la fuente aleatoria del sistema operativo MCRYPT_DEV_URANDOM.
  3. Si cambiara el factor de costo a 9, el formato dejaría de ser válido, porque crypt espera dos dígitos.