比较PHP和NodeJS之间的BCrypt哈希
对于我正在开发的应用,nodejs需要验证PHP创建的哈希,反之亦然。
[问题是,在node.js中进行测试时,PHP中生成的哈希(通过Laravel的Hash
类,仅使用PHP的password_hash
函数返回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( bcryptpareSync(password, phpGeneratedHash) ? 'PHP passed' : 'PHP failed', bcryptpareSync(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通过的输出。
我已经使用PHP 5.5.18,node.js v0.10.32和npm bcrypt模块在Ubuntu 14.04.1中运行了测试。
对于我正在开发的应用,nodejs需要验证PHP创建的哈希,反之亦然。问题是,PHP中生成的哈希值(通过Laravel的Hash类,该类仅使用PHP的password_hash ...
回答如下:这会失败,因为从php和node生成的bcrypt哈希类型不同。 Laravel生成$2y$
,而节点生成$2a$
。但好消息是2a
和2y
之间的唯一区别是它们的前缀。