比较PHP和NodeJS之间的BCrypt哈希
对于我正在开发的应用程序,nodejs需要验证PHP创建的哈希,反之亦然。
问题是,在node.js中测试时,PHP中生成的哈希(通过Hash
仅使用PHP password_hash
函数的Laravel 类)返回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模块运行了测试。
回答:
失败是因为从php和node生成的bcrypt哈希类型不同。Laravel生成$2y$
while节点生成$2a$
。但是,好消息是2a
和之间的唯一区别2y
是它们的前缀。
因此,您可以做的是使其中一个前缀与另一个相似。喜欢:
$phpGeneratedHash = '$2y$10$jOTwkwLVn6OeA/843CyIHu67ib4RixMa/N/pTJVhOjTddvrG8ge5.';$nodeGeneratedHash = '$2a$10$ZiBH5JtTDtXqDajO6f4EbeBIXGwtcGg2MGwr90xTH9ki34SV6rZhO';
像这样:
$phpGeneratedHash = '$2y$10$jOTwkwLVn6OeA/843CyIHu67ib4RixMa/N/pTJVhOjTddvrG8ge5.';$nodeGeneratedHash = '$2y$10$ZiBH5JtTDtXqDajO6f4EbeBIXGwtcGg2MGwr90xTH9ki34SV6rZhO';
请注意,我$2a$
将节点哈希的替换为$2y$
。您可以使用以下方法简单地做到这一点:
回答:
$finalNodeGeneratedHash = str_replace("$2a$", "$2y$", $nodeGeneratedHash);
回答:
finalNodeGeneratedHash = nodeGeneratedHash.replace('$2a$', '$2y$');
然后比较phpGeneratedHash
对finalNodeGeneratedHash
。
注意:如果在PHP中进行比较,建议将NodeJS生成的哈希值的前缀更改为
$2y$
,如果在NodeJS中进行比较,则建议将其更改为。将PHP生成的哈希值的前缀更改为$2a$
。
以上是 比较PHP和NodeJS之间的BCrypt哈希 的全部内容, 来源链接: utcz.com/qa/398387.html