Javascript Bcrypt在Node.js中不一致地比较密码
我正在使用bcrypt比较两个不同程序中相同的明文密码和哈希,一个告诉我密码匹配,另一个说密码不匹配 在问题文件中:Javascript Bcrypt在Node.js中不一致地比较密码,javascript,node.js,bcrypt,Javascript,Node.js,Bcrypt,我正在使用bcrypt比较两个不同程序中相同的明文密码和哈希,一个告诉我密码匹配,另一个说密码不匹配 在问题文件中: passport.use(new LocalStrategy(function(username,plainTextPassword,done) { process.nextTick(() => { db.query('SELECT * FROM users WHERE username = ?',[username],(err,rows) => {
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]);
});
});
});
}));
我正在复制明文密码和哈希的记录值,并将它们粘贴到以下代码中:
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。第一个代码块已经很好地检查了大多数密码,但这一个似乎不同。没有特殊字符,明文密码为“test”,散列存储在mysql数据库的VARCHAR(150)中。请参见[](:“cost参数指定密钥扩展迭代计数为2的幂,这是加密算法的输入”
$10$指定成本参数10,表示2^10个关键扩展回合
当然,代码行:
const salthards=10;
未使用,请删除死代码。无特殊字符
编码等如何?纯纯纯文本?您忽略了bcrypt回调中的错误?如果有必要,它将使用utf8-默认排序规则存储在数据库中。不确定如何正确回答您的问题问题不是说我在用VSCode编写的脚本中对文本进行了散列,从bash复制了散列,并将散列输入数据库。现在,当我查询登录端点时,bcrypt函数失败@TheIncorrigible1@Bergierr
对象只记录为undefined
您使用的是什么节点和Bcrypt版本?可以吗u检查:hash.trim().length==hash.length
?