Jest kilka punktów, które można poprawić, ale najpierw polecam użyć nowej funkcji PHP hasło_hasz() . Ta funkcja wygeneruje bezpieczną sól i uwzględni ją w wynikowej wartości skrótu, dzięki czemu można ją przechowywać w jednym polu bazy danych. Istnieje również pakiet zgodności dla wcześniejszych wersji.
// 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);
Kilka przemyśleń na temat Twojego kodu:
- Generujesz skrót BCrypt za pomocą crypt(), więc sól będzie częścią wynikowego skrótu. Nie ma potrzeby przechowywania go osobno.
- Generowanie soli można ulepszyć, użyj losowego źródła systemu operacyjnego MCRYPT_DEV_URANDOM.
- Jeśli zmienisz współczynnik kosztu na 9, format stanie się nieprawidłowy, ponieważ crypt oczekuje dwóch cyfr.