bcrypt node.js (自动生成盐和散列)

bcrypt node.js (auto-gen a salt and hash)

在将用户密码存储在我的数据库中之前,我正在使用以下代码对用户密码进行哈希处理(希望是加盐处理)。

// hash the password before the user is saved
ConsultantSchema.pre('save', function(next) {
  var user = this;

  // hash the password only if the password has been changed or user is new
  if (!user.isModified('password')) return next();

  // generate the hash
  bcrypt.hash(user.password, null, null, function(err, hash) {

    if (err) {
      logger.error("bcrypt.hash "+err);
      return next(err);
    } 

    // change the password to the hashed version
    user.password = hash;
    next();
  });
});

我比较困惑的是

bcrypt.hash(user.password, null, null, function(err, hash) {

我从教程中获得了这段代码,我经常看到它在寻找答案。 根据 bcrypt 的文档 (https://www.npmjs.com/package/bcrypt),我预计会出现以下代码

const saltrounds = 10;
bcrypt.hash(user.password, saltRounds, function(err, hash) {

可以正常工作,但这会无误地中断我的程序。

我的问题是: 为什么有两个 "null" 参数?他们有什么用? 散列是否基于带有两个空值的代码加盐?

预先感谢您的帮助!

以下语法来自(已废弃?)bcrypt-nodejs 模块1

bcrypt.hash(user.password, null, null, function(err, hash) {

您参考了 bcrypt 模块的文档 2

确保您使用的是正确的模块。

我使用加密库进行哈希处理,效果很好。这是我的代码片段

var salt = crypto.randomBytes(128).toString('base64');
var iterations = 10;
var keylen = 20;
crypto.pbkdf2(args.password, salt, iterations, keylen, function(succes, bcryptedPassword) {
                    console.log(bcryptedPassword.toString());
                    //Do actions here

                });

请看是否对您有帮助

有区别bcrypt and bcrypt-nodejs。以下代码来自他们位于 npmjs.com.

的文档

bcrypt 哈希

bcrypt.hash(myPlaintextPassword, salt, function(err, hash)

bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash)

bcrypt-nodejs 哈希

bcrypt.hash(myPlaintextPassword, null, null, function(err, hash)

说明

您正在查看 bcrypt 的文档,而不是 bcrypt-nodejs。如果您使用 node.js,您很可能想要使用 bcrypt-nodejs。我有多个项目利用它的功能。这两个 null 字段用于 salt 和 progress:

  • salt - [必需] - 用于散列密码的盐。
  • progress - 在哈希计算期间调用以表示进度的回调