我是JavaScript和nodejs的新手,我写了一段代码来从数据库中的密码和盐中进行用户身份验证,下面是nodejs中的代码,我收到了一个usercode和密码,我从数据库中检索数据,并将数据库中的密码和盐与收到的密码进行比较。
存储在DB中的盐是以base64格式生成的。
var Bcrypt = require('bcrypt');
var pg = require('pg');
var usercode = 'tarun';
var clientid='214057357158656';
var password='tarun';
var connectionString = "postgres://dbusername:password@localhost:5432/USCProduction";
console.log('connectin to DB');
var client = new pg.Client(connectionString);
client.connect(function(err) {
if(err) {
console.log(err);
}
var Query ='select password, salt from muser, mclient where usercode='+"'"+usercode+"'"+' and muser.clientid='+clientid+' and muser.clientid=mclient.clientid and mclient.status=1';
console.log('executing query',Query);
client.query(Query, function(err, result) {
if(err){
console.log('Error in executing Query');
client.end();
} else {
console.log(result.rows);
var passinDB=result.rows[0].password;
var saltinDB=result.rows[0].salt;
console.log('passwordinDB : ',passinDB);
console.log('saltinDB : ',saltinDB);
client.end();
Bcrypt.hash(passinDB, saltinDB, function(err, hash) {
if(err) {
return console.error(err);
}
console.log(hash);
Bcrypt.compare(password, hash, function(err, isMatch) {
if(err) {
return console.error(err);
}
console.log('do they match?', isMatch);
});
});
}
});
});
我在执行代码时遇到以下错误
passwordinDB : StAxL1r3bb/5k/6D6+BulwxhXFs=
saltinDB : FOhs8crXyO8=
[Error: Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue]
它无法找到盐的轮次数或任何其他i可能在代码中丢失,如何克服这个错误。
感谢您的评分!
5条答案
按热度按时间hpxqektj1#
一种可读的生成方式:
omqzjyyz2#
将saltinDB转换为int
xdnvmnnf3#
在这一行
盐必须以以下形式存在:$Vers$log2(NumRounds)$saltvalue]
$Vers是bcrypt_id
**$log2(NumRounds)**是一个参数,告诉它执行内部哈希函数的次数。
所以你需要生成盐,并以这种方式拥有密码:
阅读更多here
zz2j4svz4#
另一个可能的解决方案与承诺
控制台
你可以在我的代码库中看到完整的代码:
https://github.com/JonathanM2ndoza/NodeJS-API-Course/blob/master/Advanced-Node-API/src/modules/encrypt.ts
tp5buhyn5#
bcrypt.genSalt(10).then(salt => { bcrypt.hash(password,salt).then(hash => { console.log(
INFO: Hash generated: ${hash}
)//将hash存储在密码数据库中。}); }).catch(err => console.log(err));现在这对我起作用了