Новый алгоритм хеширования паролей Bitrix
В обновлении модуля main v20.5.400 Bitrix поменяли алгоритм хеширования пароля на SHA-512.
Если используете где то кастомную проверку пароля или авторизацию в своём API, то могут возникнуть проблемы.
Вместе с изменением алгоритма хеширования появился новый класс \Bitrix\Main\Security\Password
. С его помощью можно выполнять проверку введёного пароля. И так как этот метод из самого ядра, то в будующем не должно возникать таких проблем.
За проверку ввёденого пароля отвечает статический метод \Bitrix\Main\Security\Password::equals($hash, $password, $original = true): bool
.
$hash
- хеш пароля, который хранится в таблица b_user в поле PASSWORD$password
- пароль, который надо проверить$original
- этот параметр опишу ниже
Проверку пароля можно выполнить так:
$passwordCorrect = \Bitrix\Main\Security\Password::equals($arUser["PASSWORD"], $password);
Внутренний формат пароля который хранится в БД имеет вид $6${salt}${hash}
для нового хеша и {salt}{hash}
для старого формата.
Метод умеет определять в каком формате переданный $hash и выполнит преобразование $password в требуемом виде. Таким образом этим методом можно проверять пароли как старых пользователей, так и новых.
Метод \Bitrix\Main\Security\Password::equals
сначала преобразует переданный пароль в формат описанный выше, а потом возвращает hash_equals($hash, $password);
Патаметр метода $original
- при значении false отключит внутреннее преобразование переданного пароля к формату описанному выше и сразу возвращает hash_equals($hash, $password);