加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

验证在php中生成的nodejs中的密码哈希

发布时间:2021-08-28 05:09:13 所属栏目:大数据 来源: https://www.jb51.cc
导读:我的PHP代码使用password_hash生成一个哈希值,我将其存储在数据库中.以下是PHP代码: $hash = password_hash($value, PASSWORD_BCRYPT, array('cost' = $cost)); 我想在nodejs中针对此哈希验证/检查密码. 我看到了很多节点模块(bcrypt,PHPass,node-bcrypt),

我的PHP代码使用password_hash生成一个哈希值,我将其存储在数据库中.以下是PHP代码:

$hash = password_hash($value, PASSWORD_BCRYPT, array('cost' => $cost));

我想在nodejs中针对此哈希验证/检查密码.

我看到了很多节点模块(bcrypt,PHPass,node-bcrypt),但是所有节点模块都给我错误.下面是在PHP中生成的示例哈希,我试图在nodejs中验证.

var hash = '$2y$08$9TTThrthZhTOcoHELRjuN.3mJd2iKYIeNlV/CYJUWWRnDfRRw6fD2';

var bcrypt = require('bcrypt');

bcrypt.compare("secret", hash, function(err, res) {
    console.log(res);
});

(这里的秘密是真实的密码)

我目前的解决方法是通过节点调用PHP脚本来验证(对于需要解决方法的任何人)

var exec = require('child_process').exec;
var cmd = 'PHP verify.PHP password encryped_pasword';
exec(cmd, function (error, stdout, stderr) {
  // output is in stdout
  console.log(stdout);
 //If stdout has 1 it satisfies else false
});

这是一个黑客,并不是这个问题的好答案.有没有办法验证nodejs中的密码而不使用这样的解决方法?

解决方法:

用$2a $替换哈希密码中的$2y $,然后bcrypt.compare应该给你正确的结果.

var hash = '$2y$08$9TTThrthZhTOcoHELRjuN.3mJd2iKYIeNlV/CYJUWWRnDfRRw6fD2';
var bcrypt = require('bcrypt');
hash = hash.replace(/^$2y(.+)$/i, '$2a$1');
bcrypt.compare("secret", hash, function(err, res) {
    console.log(res);
});

在ES6上:

import bcrypt from 'bcrypt';
let hash = '$2y$08$9TTThrthZhTOcoHELRjuN.3mJd2iKYIeNlV/CYJUWWRnDfRRw6fD2';
hash = hash.replace(/^$2y(.+)$/i, '$2a$1');
bcrypt.compare('secret', hash, function(err, res) {
    console.log(res);
});

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读