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

HASH в битриксе, авторизация IPB3 через базу битрикса.

00 голосов
5
Проблема заключается в следующем:
Нужно авторизировать IPB3 через базу битрикса (в принципе проблемы 7 версией битрикса не замечено)
На текущий момент ясно что "проблема" в формировании хеша, если взять к примеру 7 версию битикса то хеш там состоял из 32 символов... а в восьмерке из 40, ну судя по всему разработчики изменили метод формирования, и следовательно теперь чет дописывается к этим 32 символам. (либо я не правильно понимаю ;) )

Причем если например взять и просто вставить вот такую связку из семерки в базу восьмерки:
bitrix3 e10adc3949ba59abbe56e057f20f883e (собственно логин и пароль в хеше 123456)
Так вот если это вставить в таблицу b_user то IPB3/2 с легкостью авторизируются...

А в восьмерке уже 40 символьный хеш.
bitrix5 VQEwJrvB9e51341c235c5590a302edbedc67e9f9 (соответственно логин и опять же пароль в хеше 123456)
Собстно уже IPB скажет что нифига не найден такой пользователь.

Так вот вопрос к знатокам - ... чего сделать то чтобы он успокоился и как и в 7 версии авторизировал?

:?: Я не думаю что нужно возвращать старый метод, может можно как-нибудь по-любовно решить :(
спросил 17 Авг, 13 от Anp (160 баллов)

5 Ответы

00 голосов
Посмотри как формируется хеш при регистрации пользователя - вот и ответ найдешь ;)
ответил 17 Авг, 13 от Aythis (740 баллов)
00 голосов
Алексей Котов, а где именно посмотреть то?
Тут вроде чет есть bitrix\modules\main\classes\general\user.php про 32 символа в хеш.

Цитата
if(strlen($arUser["PASSWORD"]) > 32)
{
$salt = substr($arUser["PASSWORD"], 0, strlen($arUser["PASSWORD"]) - 32);
$db_password = substr($arUser["PASSWORD"], -32);
}
else
{
$salt = "";
$db_password = $arUser["PASSWORD"];
}

if($arParams["PASSWORD_ORIGINAL"] == "Y")
$user_password = md5($salt.$arParams["PASSWORD"]);
else
$user_password = $arParams["PASSWORD"];


Плиз, подробнее...
ответил 24 Окт, 13 от Anp (160 баллов)
00 голосов
Цитата
it's_me пишет:
Тут вроде чет есть bitrix\modules\main\classes\general\user.php про 32 символа в хеш.

Цитата
it's_me пишет:
Плиз, подробнее...

Вы сами себе ответили. Если больше 32, то отсекаем соль и берем мд5 от пароля с солью.
ответил 27 Янв, 14 от Arn4 (2,140 баллов)
00 голосов
Антон Долганин, подскажите как применить это...
И откуда соль (salt) берется вообще :o
В IPB код такой:
Код
    */
   private function _comparePasswords( $password, $remote_member )
   {
      $check_pass = $password;
      
      switch( REMOTE_PASSWORD_SCHEME )
      {
         case 'md5':
            $check_pass = md5($password);
         break;
         
         case 'sha1':
            $check_pass = sha1($password);
         break;
      }
      
      if ( $check_pass == $remote_member[ REMOTE_FIELD_PASS ] )
      {
         return true;
      }
      else
      {
         return false;
      }
   }

   /**

Как переделать то? Так чтоли?
$check_pass = md5($password."".$salt)
$salt = substr($arUser["PASSWORD"], 0, strlen($arUser["PASSWORD"]) - 32);

Помогите плиз... нефига не могу понять, как сделать :(
ответил 16 Май, 14 от Anp (160 баллов)
00 голосов
Неужели никто не знает???... :cry:
ответил 12 Сен, 14 от Anp (160 баллов)

Похожие вопросы

0 голосов
0 ответов
0 голосов
2 ответов
0 голосов
4 ответов
спросил 13 Дек, 13 от Skvodan (120 баллов)