gpt4 book ai didi

node.js - Node 中密码存储的密码学最佳实践

转载 作者:IT老高 更新时间:2023-10-28 23:25:50 32 4
gpt4 key购买 nike

我正在寻找一种使用 Node.js 存储用户密码的简单、安全的解决方案。我是密码学新手,但一直试图通过在线研究拼凑出一个解决方案。我正在寻找验证,我想出的是一个可靠的解决方案,适用于具有基本(而不是银行、医院等)安全需求的 Web 应用程序。这里是:

var crypto = require('crypto');
var SALT_LENGTH = 64;
var KEY_LENGTH = 64;
var ITERATIONS = 1000;

function createHashedPassword(plainTextPassword, cb) {
crypto.randomBytes(SALT_LENGTH, function (err, salt) {
console.time('password-hash');
crypto.pbkdf2(plainTextPassword, salt, ITERATIONS, KEY_LENGTH, function (err, derivedKey) {
console.timeEnd('password-hash');
return cb(null, {derivedKey: derivedKey, salt: salt, iterations: ITERATIONS});
});
});
};

...以下是我做出的选择让我走到了这一步:

使用什么哈希算法?

基于 this widely referenced article ,看起来领先的竞争者是 PBKDF2、bcrypt 和 scrypt。我选择了 PBKDF2,因为它在 Node 中内置了支持。

要使用什么大小的盐?

This stack overflow answer似乎是我能找到的最直接的答案。我仍然不太清楚为什么 64 字节是正确的盐大小。当我四处搜索时,我得到了其他堆栈交换答案,例如 this ,但我不确定它是否适用于 Node 算法?在这里完全混淆了,针对使用此 Node 功能的新手的解释会很棒。

使用什么 key 长度?

再一次,我的选择主要基于 the same answer as above ,但我对“为什么”的基本知识一无所知。答案是“生成小于输入的 key 是一种浪费,因此至少使用 64 个字节”。嗯?再一次,一个实用的解释会很有帮助。

要使用多少次迭代?

对于这个问题,我的选择基于 this stack exchange answer .我不太了解,但我确实知道该算法应该花费大约 8 毫秒。因此,如您所见,我在函数上设置了计时器,并调整了迭代以使其在我的机器上处于该范围内。

谢谢!

最佳答案

NPM 包credential处理所有这些

您可以在本书Programming Javascript Applications 中看到作者对此的描述。

关于node.js - Node 中密码存储的密码学最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26519031/

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