sql >> Databasteknik >  >> RDS >> Mysql

Crypt() saltgenerering och lösenordskryptering, väl genomförd?

Det finns några punkter som kan förbättras, men först skulle jag rekommendera att använda PHPs nya funktion password_hash() . Denna funktion kommer att generera ett säkert salt och inkluderar det i det resulterande hash-värdet, så att du kan lagra det i ett enda databasfält. Det finns också ett kompatibilitetspaket för tidigare versioner.

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

Några tankar om din kod:

  1. Du genererar en BCrypt-hash med crypt(), så saltet kommer att vara en del av den resulterande hashen. Det finns ingen anledning att förvara den separat.
  2. Genereringen av saltet kan förbättras, använd den slumpmässiga källan för operativsystemet MCRYPT_DEV_URANDOM.
  3. Om du skulle ändra kostnadsfaktorn till 9 skulle formatet bli ogiltigt, eftersom krypten förväntar sig två siffror.



  1. Spatial Index i MySQL - ERROR - Kan inte hämta geometriobjekt från data du skickar till GEOMETRY-fältet

  2. Laravel Delete Query Builder

  3. Bästa MySQL-prestandajusteringsverktyget?

  4. Hur skickar man XML från C# till en lagrad procedur i SQL Server 2008?