Настройка шифрования данных в ModX


Добрый день! Решаю свои повседневные дела, столкнулся с такой проблемой, что шифрование данных в MODX Revolution проходит в формате PBKDF2 о чем наглядно сообщает документация файла changelog.txt:

[#325] Allow configurable user password hashing with PBKDF2 default implementation
Написал такой простой сниппет по установке пароля пользователю:

$q = $modx->newQuery('modUser');
 $q->innerJoin('modUserProfile', 'Profile');
 $q->where(array('modUser.username' => $email, 'OR:Profile.email:=' => $email)); 

 $user = $modx->getObject('modUser', $q);
 $user->set('password', '0987654321');
 $user->save();
В результате получаю в значении password такую абракадабру: JUeI95e5CPSLCjPEbmXsCqf0U1yUxDXipbp0OMerguc=

В интернете нарыл такой пример кода шифрования:
<?php
    $password = "password";
    $iterations = 1000;
    
    // Generate a random IV using mcrypt_create_iv(),
    // openssl_random_pseudo_bytes() or another suitable source of randomness
    $salt = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
    
    $hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);
    echo $hash;
    ?>
Однако, хотел отметить, что тут указывается «соль», количество итераций у другие опции, в моем же примере, нету никаких даже параметров, ModX сам по умолчанию шифрует как-то таинственным образом, не раскрывая всех подробностей опций шифрования.

Хотелось бы знать две вещи:
1) Как поменять в настройках Modx режим шифрования на более привычный, например, на md5?
2) Если менять нежелательно, то скажи тогда с помощью стандартных функций и возможностей ModX зашифровать свое значение чтобы получить идентичный результат как в сниппете?

Нужно это для следующих целей: делаю аутентификацию пароля пользователя, при сохранении получаю в формате PBKDF2 пароль, а преобразовать своими методами такой пароль из формы в PBKDF2 не могу, чтобы проверить подлинность пароля. Как решить эту ситуацию?
Андрей
17 октября 2014, 07:54
modx.pro
2
3 978
0

Комментарии: 5

Василий Наумкин
17 октября 2014, 13:53
+2
if ($modx->user->passwordMatches('0987654321')) {
	echo 'Верный пароль!';
}
github.com/modxcms/revolution/blob/master/core/model/modx/moduser.class.php
    Андрей
    17 октября 2014, 14:12
    0
    Пишу так:

    if ($modx->user->passwordMatches('0987654321'))
     {$boolpassword1 = "Верен!";}
     else 
     {$boolpassword1 = "Неверен!";}
     echo $boolpassword1;
    Пишет все время неверен пароль. Хотя идентичны они в не зашифрованном виде. Читал там у этой функции passwordMatches есть еще второй параметр, где указывается соль и прочее, это разве не играет роли в определении конечного результата?
      Виталий Киреев
      17 октября 2014, 16:59
      +2
      $modx->user это пользователь, под которым сейчас смотришь. У него такой пароль? Для проверки другого пользователя нужно его сначала получить через
      $user = $modx->getObject('modUser', $q);
      // и уже с ним проверка
      $user->passwordMatches('0987654321');
        Андрей
        18 октября 2014, 11:14
        0
        Собственно так и делаю, я же выше в вопросе написал, как получаю данные конкретного пользователя. В моем случае, эта функция вообще ничего не возвращает, ни true, ни false.
          Виталий Киреев
          18 октября 2014, 11:49
          0
          Ну по ее коду она не может ничего не возвращать, кроме true или false.

          $result = $user->passwordMatches('0987654321');
          var_dump($result);
          Какой результат?
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    5