1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

1.1.5 md5 hash паролей на Xenforo 1.1.5

Тема в разделе "Вопросы и ответы по XenForo Framework", создана пользователем Radeon, 14.09.2014.

Загрузка
  1. Radeon

    Radeon Местный

    Регистрация:
    06.02.13
    Сообщения:
    9
    Симпатии:
    0
    Версия XF:
    1.1.3
    Приветствую всех. В общем необходимо сделать так, чтобы пароли при регистрации записывались не в хеше xenforo, а в md5 хешировании. И с авторизацией аналогично.

    Пробовал полазить в скриптах, даже нашел похожую тему, но как-то глухо все равно. Кто поможет реализовать?

    P.S. Пароли же в xf_user_authenticate хранятся, не так ли? А то мб я смотрел не туда?
     
  2. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Нужно писать соответствующий аддон. Но я вам этого не советую. md5 далеко не безопасен. Что за задачу вы пытаетесь решить? XenForo прекрасно умеет встраивать стороннюю авторизацию.
     
    Mirovinger нравится это.
  3. Radeon

    Radeon Местный

    Регистрация:
    06.02.13
    Сообщения:
    9
    Симпатии:
    0
    Версия XF:
    1.1.3
    Я знаю, что md5 не безопасен, просто я хочу связать сайт с форумом, и перенести аккаунты, а на сайте хеш md5 стоит.
     
  4. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Но ведь у вас уже есть какое-то количество пользователей с хешами в стиле XenForo. С ними-то что делать?

    Чтобы переключить XenForo на использование нужного типа хэша, вам нужно заменить реализацию метода \XenForo_Authentication_Abstract::createDefault() так, чтобы этот метод возвращал нужный экземпляр наследника класса \XenForo_Authentication_Abstract.
     
  5. Radeon

    Radeon Местный

    Регистрация:
    06.02.13
    Сообщения:
    9
    Симпатии:
    0
    Версия XF:
    1.1.3
    Нету в том то и дело, форум только добавлю, и с сайтом свяжу
    --- добавлено : Sep 15, 2014 1:53 PM ---
    Опять ничего не получилось, ставлю хеширование vBulletin, но все равно выводит что-то типо 37376362376166663738393865376232623131613736373435616462636333323336666138316632 вместо md5
    <?php

    /**
    * vBulletin authentication method.
    *
    * @package XenForo_Authentication
    */
    class XenForo_Authentication_vBulletin extends XenForo_Authentication_Abstract
    {
    /**
    * Password info for this authentication object
    *
    * @var array
    */
    protected $_data = array();

    protected function _createHash($password)
    {
    return md5($password);
    }

    /**
    * Initialize data for the authentication object.
    *
    * @param string Binary data from the database
    */
    public function setData($data)
    {
    $this->_data = unserialize($data);
    }

    /**
    * Generate new authentication data
    * @see XenForo_Authentication_Abstract::generate()
    */
    public function generate($password)
    {
    if (!is_string($password) || $password === '')
    {
    return false;
    }

    $data = $this->_createHash($password);
    return serialize($data);
    }
    /**
    * Authenticate against the given password
    * @see XenForo_Authentication_Abstract::authenticate()
    */
    public function authenticate($userId, $password)
    {
    if (!is_string($password) || $password === '' || empty($this->_data))
    {
    return false;
    }

    $userHash = $this->_createHash($password);
    return ($userHash === $this->_data['hash']);
    }
    }
    public function setPassword($password, $passwordConfirm = false)
    {
    if ($passwordConfirm !== false && $password !== $passwordConfirm)
    {
    $this->error(new XenForo_Phrase('passwords_did_not_match'), 'password');
    return false;
    }

    $auth = XenForo_Authentication_Abstract::create('XenForo_Authentication_vBulletin');
    $authData = $auth->generate($password);
    if (!$authData)
    {
    $this->error(new XenForo_Phrase('please_enter_valid_password'), 'password');
    return false;
    }

    $this->set('scheme_class', $auth->getClassName());
    $this->set('data', $authData, 'xf_user_authenticate');
    return true;
    }
     
    Последнее редактирование модератором: 23.09.2014
  6. Radeon

    Radeon Местный

    Регистрация:
    06.02.13
    Сообщения:
    9
    Симпатии:
    0
    Версия XF:
    1.1.3
    Понял почему выводит такое 37376362376166663738393865376232623131613736373435616462636333323336666138316632 из-за типа строки в бд, но md5 хешируется все равно криво.
     
  7. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    VBulletin использовал не просто md5. Почитайте код внимательно. Чтобы просто md5 получить, нужно самому реализовать класс авторизации.

    Проверить md5 можно тут: http://www.md5.cz/
     
  8. Radeon

    Radeon Местный

    Регистрация:
    06.02.13
    Сообщения:
    9
    Симпатии:
    0
    Версия XF:
    1.1.3
    он возвращает md5(md5($password) . $salt); но даже меняя на md5($password) возвращает в бд не то что нужно.
     
  9. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    А что нужно? У вас есть контрольные данные? Строка и ее хэш, вычисленный другим способом? На каком движке у вас сайт?
     
  10. Radeon

    Radeon Местный

    Регистрация:
    06.02.13
    Сообщения:
    9
    Симпатии:
    0
    Версия XF:
    1.1.3
    у меня самописный движок, мне нужно обычное md5(password), но я меняю и все равно шифр другой! Помоги плиз
     
  11. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Если движок самописный, то что мешает использовать способ XenForo? Он, как минимум, надежнее, да и с проверкой потом проблем не возникнет.
     
    Kolya groza morey нравится это.
  12. Radeon

    Radeon Местный

    Регистрация:
    06.02.13
    Сообщения:
    9
    Симпатии:
    0
    Версия XF:
    1.1.3
    да в том то и проблема, что все пароли у меня в md5 хранятся! И пользователей там уже за 2к. Я бы с радостью.
     
  13. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    В таком случае напишите плагин, который будет использовать ваш способ паролей. Затем внесите в базу ксена тех пользователей, которые уже есть в Вашей CMS, но не забудьте указать в базе, что они используют не дефолтный, а Ваш способ. В общем просто посмотрите, как сделан импорт из vBulletin - там как раз пользователи перетягиваются с их хешами паролей. Ну и по аналогии.
     
  14. Radeon

    Radeon Местный

    Регистрация:
    06.02.13
    Сообщения:
    9
    Симпатии:
    0
    Версия XF:
    1.1.3
    <?php

    /**
    * vBulletin authentication method.
    *
    * @package XenForo_Authentication
    */
    class XenForo_Authentication_vBulletin extends XenForo_Authentication_Abstract
    {
    /**
    * Password info for this authentication object
    *
    * @var array
    */
    protected $_data = array();

    protected function _createHash($password, $salt)
    {
    return md5(md5($password) . $salt);
    }

    /**
    * Initialize data for the authentication object.
    *
    * @param string Binary data from the database
    */
    public function setData($data)
    {
    $this->_data = unserialize($data);
    }

    /**
    * Generate new authentication data
    * @see XenForo_Authentication_Abstract::generate()
    */
    public function generate($password)
    {
    throw new XenForo_Exception('Cannot generate authentication for this type.');
    }

    /**
    * Authenticate against the given password
    * @see XenForo_Authentication_Abstract::authenticate()
    */
    public function authenticate($userId, $password)
    {
    if (!is_string($password) || $password === '' || empty($this->_data))
    {
    return false;
    }

    $userHash = $this->_createHash($password, $this->_data['salt']);
    return ($userHash === $this->_data['hash']);
    }
    }
    Метод идет как шифрация пароля по мд5 + соль, и еще раз md5, но если я ставлю просто md5($password) то в бд хеш все равно не сходится. Как правильно переписать?
     
  15. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Волшебство и не иначе :)
    Ну а на самом деле значит что-то делаете не так. Приведите Ваш измененный код ксена и код из Вашей CMS.
     
  16. edka

    edka Активный пользователь

    Регистрация:
    23.06.13
    Сообщения:
    28
    Симпатии:
    2
    У меня была похожая проблемка с DLE, я все никак не мог понять, почему md5 хеш получался не верный, пока не допетрил, что в нем оказывается пароль два раза хешируется, т.е. md5 (md5 ( пароль)).
    Может и вашем случае также?
     
  17. Radeon

    Radeon Местный

    Регистрация:
    06.02.13
    Сообщения:
    9
    Симпатии:
    0
    Версия XF:
    1.1.3
    Я изменял хэш, но он все равно кривой был.
    Вечерком скину, сейчас на учебе.
     

Поделиться этой страницей