NodeJS - SHA256密码加密

Dus*_*tin 38 javascript cryptography node.js

我目前正在学习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);
      });
    });
  }
};
Run Code Online (Sandbox Code Playgroud)

hex*_*ide 79

如果想生成sha256哈希值,那么你必须删除特定于那些的迭代和长度属性pbkdf2.然后crypto.createHash(),您将使用OpenSSL生成哈希值.话虽这么说,您可以生成的哈希类型取决于您已安装的OpenSSL的版本.

var crypto = require('crypto');
var hash = crypto.createHash('sha256').update(pwd).digest('base64');
Run Code Online (Sandbox Code Playgroud)

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

var crypto = require('crypto');
module.exports = function(pwd, fn) {
  var hash = crypto.createHash('sha256').update(pwd).digest('base64');
  fn(null, hash);
};
Run Code Online (Sandbox Code Playgroud)

  • 哈希仍然是`sha256`,它只是一个不同的编码.问这个问题的人也使用`base64`作为他的编码,因此,我这样回答. (11认同)
  • 实际上要在sha256中生成密码哈希,你必须使用摘要'hex':var hash = crypto.createHash('sha256').update(pwd).digest('hex'); (9认同)
  • 是的,只是因为我猜有些人不管理编码并希望在基本的SHA256(比如我)中得到结果,我花了一些时间来理解它所以我只是想为nexts提供帮助:p (7认同)
  • @ user740189,您好:SHA是一种单向算法,是一种哈希算法。它并不意味着不能逆转,也不能逆转。散列算法旨在以独特的方式表示数据。这并不意味着要存储数据。 (2认同)