Mysql
 sql >> Database >  >> RDS >> Mysql

Crypt() generazione di sale e crittografia della password, ben eseguita?

Ci sono alcuni punti che possono essere migliorati, ma prima consiglierei di usare la nuova funzione di PHP password_hash() . Questa funzione genererà un salt sicuro e lo includerà nel valore hash risultante, in modo da poterlo archiviare in un unico campo del database. Esiste anche un pacchetto di compatibilità per le versioni precedenti.

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

Alcuni pensieri sul tuo codice:

  1. Generi un hash BCrypt con crypt(), quindi il sale farà parte dell'hash risultante. Non è necessario conservarlo separatamente.
  2. La generazione del sale può essere migliorata, utilizza la sorgente casuale del sistema operativo MCRYPT_DEV_URANDOM.
  3. Se cambiassi il fattore di costo a 9, il formato non sarebbe valido, perché crypt prevede due cifre.