我正在开发的一个应用程序中,node.js需要验证PHP创建的哈希值,反之亦然。
问题是,在PHP中生成的哈希值(通过Laravel的Hash
类,它只使用了PHP的password_hash
函数)在node.js中测试时返回false。
以下是node.js脚本:
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失败,nodejs通过”,但以下PHP脚本:
<?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模块运行了测试。
.replace(/^\$2y/, "$2a")
... 来自 https://dev59.com/GVoV5IYBdhLWcg3wmPzp#36043615/ - Ryan