Мое веб-приложение использует 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);
Других решений пока нет …