mar*_*314 9 passwords cryptography salt pbkdf2 node.js
我正在寻找一种简单,安全的解决方案,用于使用Node存储用户的密码.我是加密新手,但一直试图通过在线研究将解决方案整合在一起.我正在寻找验证,我提出的是一个基本(不是银行,医院等)安全需求的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});
});
});
};
Run Code Online (Sandbox Code Playgroud)
......这是我做出的选择让我达到了这一点:
使用什么哈希算法?
基于这篇被广泛引用的文章,看起来主要的竞争者是PBKDF2,bcrypt和scrypt.我选择了PBKDF2,因为它内置了Node支持.
什么盐的大小?
这个堆栈溢出答案似乎是我能找到的最直接的答案.我仍然不太清楚为什么64字节是正确的盐大小.当我谷歌的时候,我得到一个叠层交换答案像这样,但我不知道它适用于节点的算法?在这里完全混淆,针对使用此节点功能的新手的解释将是非常棒的.
使用什么密钥长度?
再一次,我的选择主要取决于上面的相同答案,但我对"为什么"的基本知识一模糊.答案是"生成小于输入的密钥是浪费,所以至少要使用64个字节".咦?再一次,实际的解释会有所帮助.
要使用多少次迭代?
对于这个问题,我根据这个堆栈交换答案做出了我的选择.我不太了解它,但我确实认为该算法大约需要8ms.所以,正如你所看到的那样,我将定时器放在函数上,并且我调整了迭代次数,以便在我的机器上进行调整.
谢谢!
| 归档时间: |
|
| 查看次数: |
5155 次 |
| 最近记录: |