Mysql
 sql >> Base de données >  >> RDS >> Mysql

Génération de sel Crypt() et chiffrement de mot de passe, bien exécutés ?

Il y a quelques points qui peuvent être améliorés, mais je recommanderais d'abord d'utiliser la nouvelle fonction de PHP password_hash() . Cette fonction générera un sel sûr et l'inclura dans la valeur de hachage résultante, afin que vous puissiez le stocker dans un seul champ de base de données. Il existe aussi un pack de compatibilité pour les versions antérieures.

// 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);

Quelques réflexions sur votre code :

  1. Vous générez un hachage BCrypt avec crypt(), donc le sel fera partie du hachage résultant. Il n'est pas nécessaire de le stocker séparément.
  2. La génération du sel peut être améliorée, utilisez la source aléatoire du système d'exploitation MCRYPT_DEV_URANDOM.
  3. Si vous changez le facteur de coût en 9, le format deviendra invalide, car crypt attend deux chiffres.