bcrypt.hash不会调用它的回调

时间:2017-04-09 13:29:07

标签: node.js bcrypt

由于某种原因,bcrypt.hash方法挂起并且从不调用其回调。

bcrypt.genSalt(29, function(err, salt) {
    if (err) {
        res.json({ success: false, msg: err.message });
    } else {
        bcrypt.hash(req.body.password, salt, function (err, hash) {
            // This function is never called
            res.json({ success: true });
        });
    }
});

有什么建议吗?

更新

它似乎与express.js&等等。 我刚刚创建了一个脚本文件test.js

var bcrypt = require('bcrypt');

var pwd = 'Test password 123';

bcrypt.genSalt(29, function(err, salt) {
    if (err) {
        console.log('1: ' + err.message);
    } else {
        console.log('Salt: ' + salt);
        bcrypt.hash(pwd, salt, function (err, hash) {
            if (err) {
                console.log('2: ' + err.message);
            } else {
                console.log('Hash: ' + hash);
            }
        });
    }
});

然后我通过使用node test.js启动它。它输出一个salt,之后它会挂起并且bcrypt.hash在任何情况下都不会调用它的回调函数。我正在使用OS X,我安装了节点v7.8.0。

1 个答案:

答案 0 :(得分:7)

29次盐轮意味着Math.pow(2, 29)关键的扩张轮次,这需要很长时间。

举例说明:

  • 我的MBP上的10轮大约需要78毫秒
  • 12轮需要大约300毫秒
  • 14轮大约需要1170毫秒
  • 16轮大约需要4700毫秒

你可以用数学来计算使用29轮的时间(它在260万秒或大约一个月的某个时间点)。