Для приложения, над которым я работаю, nodejs необходимо проверить хэши, созданные PHP и наоборот.
Проблема заключается в том, что хэши, сгенерированные в PHP (через класс Laravel Hash
, который просто использует функцию PHP password_hash
), возвращают false при тестировании в node.js.
Следующий node.js script:
var bcrypt = require('bcrypt');
var password = 'password';
var phpGeneratedHash = '$2y$10$jOTwkwLVn6OeA/843CyIHu67ib4RixMa/N/pTJVhOjTddvrG8ge5.';
var nodeGeneratedHash = '$2a$10$ZiBH5JtTDtXqDajO6f4EbeBIXGwtcGg2MGwr90xTH9ki34SV6rZhO';
console.log(
bcrypt.compareSync(password, phpGeneratedHash) ? 'PHP passed' : 'PHP failed',
bcrypt.compareSync(password, nodeGeneratedHash) ? 'nodejs passed' : 'nodejs failed'
);
выдает: "PHP failed nodejs прошел", тогда как следующий PHP script:
<?php
$password = 'password';
$phpGeneratedHash = '$2y$10$jOTwkwLVn6OeA/843CyIHu67ib4RixMa/N/pTJVhOjTddvrG8ge5.';
$nodeGeneratedHash = '$2a$10$ZiBH5JtTDtXqDajO6f4EbeBIXGwtcGg2MGwr90xTH9ki34SV6rZhO';
print password_verify($password, $phpGeneratedHash) ? 'PHP passed' : 'PHP failed';
print password_verify($password, $nodeGeneratedHash) ? 'nodejs passed' : 'nodejs failed';
выводит 'PHP передан nodejs прошло'.
Я запускал тесты в Ubuntu 14.04.1, используя PHP 5.5.18, node.js v0.10.32 и модуль npm bcrypt.