Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как битрикс сохраняет пароль?

00 голосов
1
По какому алгоритму вычисляется PASSWORD_HASH пользователя?
спросил 24 Фев, 16 от аноним

1 Ответ

00 голосов

PASSWORD_HASH в БД в исходниках обозначен как deprecated, в сессии - берётся из пароля.
Вообще говоря, изучайте /bitrix/modules/main/classes/general/user.php
Пароль в бд строится так:

$salt = randString(8, array(
"abcdefghijklnmopqrstuvwxyz",
"ABCDEFGHIJKLNMOPQRSTUVWXYZ",
"0123456789",
",.<>/?;:[]{}\\|~!@#\$%^&*()-_+=",
));
$arFields["PASSWORD"] = $salt.md5($salt.$arFields["PASSWORD"]);

 

 

ответил 24 Фев, 16 от root (25,590 баллов)
Спасибо за ответ, а как получить соль? В этом вся проблема.
Соль - первые 8 случайных символов, случайных для каждого пароля отдельно.
Не понимаю, а как тогда проверить совпадение пароля по хешу? Например, если нужно подтвердить свой пароль, пользователь вводит свой пароль, а как его проверить, не зная соль?
Ну, у нас же есть запись в БД, которая содержит "соль" и "солёный хеш от пароля".
Вот код проверки пароля из вышеупомянутого файла:

// arUser - из БД, arParams - введённые параметры авторизации
$salt = substr($arUser["PASSWORD"], 0, strlen($arUser["PASSWORD"]) - 32);
$db_password = substr($arUser["PASSWORD"], -32);
$user_password =  md5($salt.$arParams["PASSWORD"]);
if($db_password === $user_password) {
 /// авторизовать пользователя
}
Пробовал так, но чет не сработало, наверное я не что-то делаю, а может не понимаю. А в корпортале 24 такой же алгоритм, мне почему-то кажется, что другой.