Има някои точки, които могат да бъдат подобрени, но първо бих препоръчал да използвате новата функция на PHP password_hash() . Тази функция ще генерира безопасна сол и ще я включи в получената хеш-стойност, така че можете да я съхранявате в едно поле на базата данни. Съществува и пакет за съвместимост за по-ранни версии.
// 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);
Някои мисли за вашия код:
- Генерирате BCrypt хеш с crypt(), така че солта ще бъде част от получения хеш. Не е необходимо да го съхранявате отделно.
- Производството на солта може да се подобри, използвайте произволния източник на операционната система MCRYPT_DEV_URANDOM.
- Ако промените коефициента на разходите на 9, форматът ще стане невалиден, тъй като crypt очаква две цифри.