gpt4 book ai didi

Node.JS Crypto.HMac 生成密码

转载 作者:搜寻专家 更新时间:2023-11-01 00:13:13 25 4
gpt4 key购买 nike

刚刚学习了如何在数据库中存储密码的教程。他们使用以下内容生成散列密码:

hasher.computeHash = function(source, salt) {
var hmac = crypto.crypto.createHmac("sha1", salt);
var hash = hmac.update(source);
return hash.digest("hex");
};

无论出于何种原因,我都会感到困惑,因为每当我研究密码密码术时,我总是使用一个我附加到盐中的 secret ,但我找不到任何资源可以做到这一点......我是什么意思是:

hasher.computeHash = function(source, salt) {
var saltNHash = salt + "super Secret LOOONG string!!";
var hmac = crypto.crypto.createHmac("sha1", saltNHash);
var hash = hmac.update(source);
return hash.digest("hex");
};

这是一个糟糕的方法吗?有没有更好的方法在 Node 模块中进行加密(将密码存储在数据库中)?

谢谢,抱歉,如果重复,我环顾四周,但我不认为我知道谷歌的正确关键字。

最佳答案

我强烈推荐关注 Todd Yandell's answer并使用 bcrypt .慢速算法确实是您想要的密码。也就是说,让我也回答你的问题。

让我们谈谈为什么要使用盐。盐是一种方式

  1. 减缓暴力破解尝试。
    如果不使用盐,两个密码相同的用户将同时暴露。为每个散列分别对所有内容进行加盐,迫使攻击者将其散列尝试增加 N 个数量级。
  2. 防止预计算攻击,例如 rainbow tables .这些攻击利用相关散列的特性以及计算时间和存储空间之间的权衡,使无盐攻击算法(参见 Windows XP)变得快速和容易。

因为(我认为!)您为每个密码使用了随机盐,所以您已经做到了。

也就是说,您将 secret 附加到所有内容的方法实际上并没有那么有用。虽然它在技术上增加了一些复杂性;因为它只是一个静态字符串,所以它并不比默默无闻的安全性好多少。一旦找到单一 secret (如果您的数据库中甚至只有一两个弱密码或者攻击者可以访问您的机器,这相当容易),它就不再有用了。坚持使用随机盐,你(可能)会没事的。

关于Node.JS Crypto.HMac 生成密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24072207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com