Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Crypt()-Salzgenerierung und Passwortverschlüsselung, gut ausgeführt?

Es gibt einige Punkte, die verbessert werden können, aber zuerst würde ich empfehlen, die neue Funktion von PHP zu verwenden password_hash() . Diese Funktion generiert ein sicheres Salt und fügt es in den resultierenden Hash-Wert ein, sodass Sie es in einem einzelnen Datenbankfeld speichern können. Es gibt auch ein Kompatibilitätspaket für frühere Versionen.

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

Einige Gedanken zu Ihrem Code:

  1. Sie generieren einen BCrypt-Hash mit crypt(), sodass das Salt Teil des resultierenden Hashs ist. Eine separate Aufbewahrung ist nicht erforderlich.
  2. Die Generierung des Salt kann verbessert werden, verwenden Sie die Zufallsquelle des Betriebssystems MCRYPT_DEV_URANDOM.
  3. Würde man den Kostenfaktor auf 9 ändern, würde das Format ungültig, da crypt zwei Ziffern erwartet.