gpt4 book ai didi

javascript - Bcrypt 无法一致地比较 Node.js 中的密码

转载 作者:太空宇宙 更新时间:2023-11-03 22:23:28 27 4
gpt4 key购买 nike

我现在正在使用 bcrypt 比较两个不同程序中的相同 plainTextPassword 和哈希,一个告诉我密码匹配,另一个告诉我它们不匹配。

在问题文件中:

passport.use(new LocalStrategy(function(username,plainTextPassword,done) {
process.nextTick(() => {
db.query('SELECT * FROM users WHERE username = ?',[username],(err,rows) => {
if (err) return done(err);
if (!rows[0]) return done(null,false);

let hash = rows[0].password;
let user = rows[0];
bcrypt.compare(plainTextPassword, hash, (err, res) => {
console.log(plainTextPassword); // test
console.log(hash); // $2b$10$EefqCwYTMHDDtIGH.SIHIu.BPCOiT7Bp4Zzej5iUoxlKtMZ67oHtC
console.log(res); // false
if (!res) return done(null,false);
return done(null,rows[0]);
});
});
});
}));

我正在复制 plainTextPassword 和哈希的记录值并将它们粘贴到此代码中:

const bcrypt = require('bcrypt');
const saltRounds = 10;
bcrypt.compare('test', '$2b$10$EefqCwYTMHDDtIGH.SIHIu.BPCOiT7Bp4Zzej5iUoxlKtMZ67oHtC', (err,same) => {
console.log(same); // true
}

这将返回 true,而不是像第一个代码块返回的 console.log(res) 那样返回 false。第一个代码块可以很好地检查大多数密码,但这个代码块似乎有所不同。没有特殊字符,plainTextPassword 是“test”,哈希值存储在 mysql 数据库中的 VARCHAR(150) 中。

最佳答案

参见 []( https://en.wikipedia.org/wiki/Bcrypt :“成本参数将 key 扩展迭代计数指定为 2 的幂,这是 crypt 算法的输入”

$10$ 指定成本参数为 10,表示 2^10 轮 key 扩展。

当然代码行:const saltRounds = 10;没有使用,删除死代码。

关于javascript - Bcrypt 无法一致地比较 Node.js 中的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50455604/

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