Мое веб-приложение использует функцию PHP crypt()
для хэширования паролей. Я хотел использовать алгоритм SHA256, поэтому я создал солевые строки пользователей соответственно. Проблема в том, что я не понимал, что SHA256 не поддерживается на сервере, который я использовал (CRYPT_SHA_256
). Я только что перенесла свое приложение на другой сервер, который поддерживает SHA256, и в основном никто из моих пользователей не может войти в систему, потому что их строки паролей и солевые строки генерируют разные хэши по сравнению с хэшами, созданными на предыдущем сервере.
Как вы считаете, лучшее решение могло бы не просить каждого пользователя изменить свои пароли?
Заранее спасибо, я ценю любые полезные идеи.
На самом деле функция crypt()
должна иметь возможность проверять ваши существующие хеши, даже если они не являются SHA-256, как вы хотели создать. Поскольку API нового пароля использует функцию crypt(), возможно, даже будет возможно проверить ваши хэши с новыми функциями:
// 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);
Чтобы генерировать новые хеши, вы должны использовать новую функцию password_hash(), она автоматически создаст безопасную соль. Более того, он вычисляет хэширование BCrypt вместо SHA-256, которое не подходит для хэш-паролей.
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);