Tag:

Node.jsencryptionPBKDF2函数在v8 vs v10上返回不同的值

该节点代码片段基于节点平台版本返回不同的值。 在运行Ubuntu 14.04的EC2中有两个相同的实例(节点版本除外)。 "use strict"; var crypto = require("crypto"); crypto.pbkdf2("password", "salt", 1000, 32, function(err, derivedKey) { if (err) { console.error(err); } else { console.log(new Buffer(derivedKey).toString('base64')); } }); 在节点v0.8.28上 ,控制台值是: bsKIwr7Ci8KtfsKuwp3CnhDCqgYSJANPw61Iw5A / w4vCrcKWwotWAGfChFPCnVIU 在节点v0.10.5上 ,值是: 博伊+ I61 + rp2eEKoGEiQDT + 1I0D / LrZaLVgBnhFOdUhQ = 这是一个巨大的问题,因为我们正在升级应用程序的节点版本,密码不能正确解密。 谢谢!

密码哈希+盐如何工作

我虽然我理解哈希和腌制密码,但似乎我有一些误解。 我正在为nodejs中的我的网站创build一个用户帐户系统。 我理解的方式是,当用户创build一个密码时,我们生成一个随机salt,将其附加到密码,然后散列该string。 我们还可以添加一个工作因子,使哈希缓慢工作,并防范蛮力攻击。 我们将salt和散列一起存储在我们的数据库中,并validation一个login尝试,我们用储存的salt和密码尝试重复上述过程(在服务器上),并检查哈希是否匹配。 似乎nodejs中的bcrypt模块与我对散列的解释不一致。 这是来自http://codetheory.in/using-the-node-js-bcrypt-module-to-hash-and-safely-store-passwords/上的一个例子 var salt = bcrypt.genSaltSync(10); var hash = bcrypt.hashSync("my password", salt); 首先,为什么工作因素适用于盐而不是哈希? 如果有人用暴力攻击,他们会运行哈希函数是否正确? 哈希函数是不是我们需要慢一点? 我也对bcryptvalidation感到困惑: bcrypt.compareSync("my password", hash); 即使两个用户select相同的密码,我们也需要哈希值是独一无二的,这是否是盐点? 那么为什么我们不这样做呢? bcrypt.compareSync("my password"+salt, hash);