Ответ 1
CPasswordHelper работает как функции PHP password_hash() и password_verify(), они являются обертками вокруг функции crypt(). Когда вы создаете хэширование BCrypt, вы получите строку из 60 символов, содержащую соль.
// Hash a new password for storing in the database.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
Переменная $hashToStoreInDb теперь будет содержать хеш-значение, подобное этому:
$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | | |
| | | hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | |
| | salt = nOUIs5kJ7naTuTFkBy1veu
| |
| cost-factor = 10 = 2^10 iterations
|
hash-algorithm = 2y = BCrypt
Соль, которую вы можете найти после третьего $
, генерируется автоматически с помощью пароля_hash() с использованием случайного источника операционной системы. Поскольку соль включена в результирующую строку, функция password_verify() или фактически обернутая функция склепа может извлекать ее оттуда и может вычислять хэш с той же солью (и тот же коэффициент затрат). Эти два хеша тогда сопоставимы.
// 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);