Код: Выделить всё
falseТеперь я хочу использовать 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
Мобильная версия