Er zijn enkele punten die kunnen worden verbeterd, maar eerst zou ik aanraden om de nieuwe functie van PHP te gebruiken password_hash() . Deze functie genereert een veilige salt en neemt deze op in de resulterende hash-waarde, zodat u deze in een enkel databaseveld kunt opslaan. Er bestaat ook een compatibiliteitspakket voor eerdere versies.
// 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);
Enkele gedachten over uw code:
- Je genereert een BCrypt-hash met crypt(), dus het zout maakt deel uit van de resulterende hash. Het is niet nodig om het apart op te slaan.
- Het genereren van het zout kan worden verbeterd, gebruik de willekeurige bron van het besturingssysteem MCRYPT_DEV_URANDOM.
- Als je de kostenfactor zou veranderen in 9, zou het formaat ongeldig worden, omdat crypt twee cijfers verwacht.