2

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

// 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) {

正在工作,但这会破坏我的程序而不会出错。

我的问题是:为什么有两个“空”参数?它们是干什么用的?哈希是否基于具有两个空值的代码进行加盐?

提前感谢您的帮助!

4

3 回答 3

2

bcryptbcrypt-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 - 在哈希计算期间调用的回调以表示进度
于 2017-06-28T08:39:41.670 回答
1

I have used crypto library for hashing and it works great. Here is my code snippet

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

                });

Please check if it helps you or not

于 2017-06-28T08:39:26.927 回答
0

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

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

您参考 bcrypt 模块2的文档。

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

于 2017-06-28T08:38:31.857 回答