41

我目前正在学习 NodeJS 中的加密和密码安全。我正在使用当前正在使用 PBKDF2 的当前示例,我想将其切换为使用 SHA256。这可能和/或有意义吗?我该怎么办?

var crypto = require('crypto');

var len = 128;

var iterations = 13000;

module.exports = function (pwd, salt, fn) {
  if (3 == arguments.length) {
    crypto.pbkdf2(pwd, salt, iterations, len, fn);
  } else {
    fn = salt;
    crypto.randomBytes(len, function(err, salt){
      if (err) return fn(err);
      salt = salt.toString('base64');
      crypto.pbkdf2(pwd, salt, iterations, len, function(err, hash){
        if (err) return fn(err);
        fn(null, salt, hash);
      });
    });
  }
};
4

1 回答 1

83

如果想要生成sha256哈希,那么您必须删除迭代和长度属性,因为它们是特定于pbkdf2. 然后,您将使用crypto.createHash()which 使用 OpenSSL 来生成哈希。话虽如此,您可以生成的哈希类型取决于您安装的 OpenSSL 版本。

var crypto = require('crypto');
var hash = crypto.createHash('sha256').update(pwd).digest('base64');

您的具体实现可能如下所示:

var crypto = require('crypto');
module.exports = function(pwd, fn) {
  var hash = crypto.createHash('sha256').update(pwd).digest('base64');
  fn(null, hash);
};
于 2013-10-08T00:30:43.087 回答