Настройка шифрования данных в 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 не могу, чтобы проверить подлинность пароля. Как решить эту ситуацию?
Комментарии: 5
if ($modx->user->passwordMatches('0987654321')) {
echo 'Верный пароль!';
}
github.com/modxcms/revolution/blob/master/core/model/modx/moduser.class.php
Пишу так:
if ($modx->user->passwordMatches('0987654321'))
{$boolpassword1 = "Верен!";}
else
{$boolpassword1 = "Неверен!";}
echo $boolpassword1;
Пишет все время неверен пароль. Хотя идентичны они в не зашифрованном виде. Читал там у этой функции passwordMatches есть еще второй параметр, где указывается соль и прочее, это разве не играет роли в определении конечного результата?
$modx->user это пользователь, под которым сейчас смотришь. У него такой пароль? Для проверки другого пользователя нужно его сначала получить через
$user = $modx->getObject('modUser', $q);
// и уже с ним проверка
$user->passwordMatches('0987654321');
Собственно так и делаю, я же выше в вопросе написал, как получаю данные конкретного пользователя. В моем случае, эта функция вообще ничего не возвращает, ни true, ни false.
Ну по ее коду она не может ничего не возвращать, кроме true или false.
$result = $user->passwordMatches('0987654321');
var_dump($result);
Какой результат?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.