Реализации Phpass в WP и Node не совпадают, если в пароле есть международные символы.Php

Кемеровские программисты php общаются здесь
Anonymous
Реализации Phpass в WP и Node не совпадают, если в пароле есть международные символы.

Сообщение Anonymous »

Я хочу аутентифицировать пользователей WP, используя мою собственную службу аутентификации, написанную на Node. У меня есть пользователи, сохраненные в таблице wp_users. Их пароли хешируются WordPress с помощью метода Phpass. Когда пользователь пытается войти в свою учетную запись, WP использует метод CheckPassword() и возвращает логическое значение true/ соответствует пароль или нет.

Теперь я хочу использовать Node для сравнения пароля пользователя с хешем WP. Я нашел модуль node-phpass в NPM, который должен обеспечивать алгоритм Phpass для хеширования паролей.

Все в порядке, пока я не использую международные символы. Вот пример:

В WP я устанавливаю такой пароль и получаю хеш:

P: alamakota

H: $P$BSrncAWIY2KU7waUGLzayaon6v3gKU1

Когда я пытаюсь войти в систему, WP говорит "Все хорошо, заходи, чувак"

Теперь я беру хеш и пытаюсь проверить его с помощью модуля node-phpass:

Код: Выделить всё

const hasher = new PasswordHash(8, true, 7);
const valid = hasher.CheckPassword('alamakota', '$P$BSrncAWIY2KU7waUGLzayaon6v3gKU1');
console.log(valid); // => true
и он говорит "Круто, пароль совпадает!"

Он прекрасно работает и в другом случае.

Теперь, где возникает проблема, спросите вы? Здесь:

Ситуация почти точно такая же, как и раньше, но я поставлю в пароль символ ą и хеширую его с помощью WP:

P: alamakotą

H: $P$B6kY.rneyNwdPvAgd0lDq6oYv82XOd1

Опять же, при проверке с помощью WP он говорит "Пароль совпадает! Заходите".

К сожалению, когда я пытаюсь сравнить пароль с помощью node-phpass, он говорит "Извини, чувак, ты должен не пройти":

Код: Выделить всё

const hasher = new PasswordHash(8, true, 7);
const valid = hasher.CheckPassword('alamakotą', '$P$B6kY.rneyNwdPvAgd0lDq6oYv82XOd1');
console.log(valid); // => false
По-другому это тоже не работает.

Почему так? Почему я не могу использовать хеш WP в Node.js, если в пароле есть международные символы?

ОБНОВЛЕНИЕ:

Я только что обнаружил, что функция PHP md5() и функция crypto.createHash('md5') в JS не возвращают один и тот же хэш, если во входной строке есть международные символы. Есть ли какое-нибудь решение этой проблемы?

Подробнее здесь: https://stackoverflow.com/questions/567 ... ternationa

Вернуться в «Php»