对于我正在处理的应用程序,nodejs需要验证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'
);
Run Code Online (Sandbox Code Playgroud)
输出:'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';
Run Code Online (Sandbox Code Playgroud)
输出'PHP传递的nodejs传递'.
我已经运行使用PHP 5.5.18在Ubuntu 14.04.1测试,Node.js的v0.10.32和故宫bcrypt模块.
我面临的情况需要验证password_hash在nodejs服务器上通过PHP 方法创建的密码.
是否nodejs有可用的包相当于password_hash和password_verify?谢谢.
我正在处理带有$2y哈希的旧数据库.我已经挖了一下这个,也偶然发现堆栈溢出$2a和之间的区别$2y.
我查看了bcrypt似乎生成并仅比较$2a哈希的节点模块.
我找到了一个生成$2y哈希的网站,所以我可以测试它们bcrypt.
这是一个$2y字符串哈希的例子helloworld.
helloworld:$2y$10$tRM7x9gGKhcAmpeqKEdhj.qRWCr4qoV1FU9se0Crx2hkMVNL2ktEW
Run Code Online (Sandbox Code Playgroud)
似乎模块无法验证$2y哈希值.
这是我的考试.
var Promise = require('bluebird')
var bcrypt = require('bcrypt')
var string = 'helloworld'
Promise.promisifyAll(bcrypt)
// bcrypt.genSalt(10, function(err, salt) {
// bcrypt.hash(string, salt, function(err, hash) {
// console.log(hash)
// })
// })
var hashesGeneratedUsingBcryptModule = [
'$2a$10$6ppmIdlNEPwxWJskPaQ7l.d2fblh.GO6JomzrcpiD/hxGPOXA3Bsq',
'$2a$10$YmpoYCDHzdAPMbd9B8l48.hkSnylnAPbOym367FKIEPa0ixY.o4b.',
'$2a$10$Xfy3OPurrZEmbmmO0x1wGuFMdRTlmOgEMS0geg4wTj1vKcvXXjk06',
'$2a$10$mYgwmdPZjiEncp7Yh5UB1uyPkoyavxrYcOIzzY4mzSniGpI9RbhL.',
'$2a$10$dkBVTe2A2DAn24PUq1GZYe7AqL8WQqwOi8ZWBJAauOg60sk44DkOC'
]
var hashesGeneratedUsingAspirineDotOrg = [
'$2y$10$MKgpAXLJkwx5tpijWX99Qek2gf/irwvp5iSfxuFoDswIjMIbj2.Ma',
'$2y$10$tRM7x9gGKhcAmpeqKEdhj.qRWCr4qoV1FU9se0Crx2hkMVNL2ktEW'
]
var …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Node.js需要使用来自Laravel应用程序的相同数据库信息登录的应用程序。
我已经阅读BCrypt并尝试使用它来比较它生成的散列密码与Laravel存储在数据库中的密码。
所以,根据 的文档BCrypt,我需要做这样的事情:
var salt = bcrypt.genSaltSync(saltRounds);
var hash = bcrypt.hashSync(myPlaintextPassword, salt);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用完全相同的盐Laravel来散列我的密码。我需要使用APP_KEY来做到这一点吗?