04.06.2021

Новый алгоритм хеширования паролей 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);