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