NodeJS - SHA256密码加密

43

我目前正在学习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);
      });
    });
  }
};

1
这可能会对你有所帮助 https://dev59.com/GGYr5IYBdhLWcg3wYpUg - y--
2
这是一个相当不错的密码哈希总结:https://crackstation.net/hashing-security.htm - ntoskrnl
请查看此模块:https://www.npmjs.com/package/sha256 - James111
2
请不要使用sha256进行密码哈希处理 https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords - user196499
1个回答

88
如果想生成sha256哈希值,则必须删除迭代和长度属性,因为这些属性是特定于pbkdf2的。此时您将使用crypto.createHash()来生成哈希值,该函数使用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);
};

10
生成一个使用sha256哈希的密码,需要使用'digest'函数并传递参数'hex': var hash = crypto.createHash('sha256').update(pwd).digest('hex'); - Vadorequest
11
哈希仍然是 sha256,只是采用了不同的编码方式。问问题的人也使用了 base64 作为编码方式,因此我这样回答。 - hexacyanide
7
没错,我想有些人可能不懂编码,只希望得到基本的SHA256结果(像我一样),我自己花了一些时间才理解,所以我只是想为接下来需要帮助的人提供帮助 :p - Vadorequest
1
嗨,这只是加密。你能告诉我如何解密吗? - user740189
2
嗨@user740189,SHA是一种单向算法,哈希算法。 它不能被翻转。 哈希算法旨在以独特的方式表示数据。 它不适合存储数据。 - Elliot Huffman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接