При регистрации я шифрую пароль и сохраняю его в БД. При входе в систему я снова шифрую пароль и пытаюсь совместить с паролем в БД во время извлечения данных как SELECT * FROM table where uname=Username AND pwd=encryptedPasswd
. Но пароли не совпадают даже в том же виде. Как это решить? Ниже мой код. pswd
при регистрации и pswds
в логине не совпадают.Шифрование шифрования одной и той же строки для другой строки?
Регистрация
app.post("/register", function(req, res){
// Assume I have a value in post.pwd
var pswd = cipher.update(post.pwd, 'utf8', 'hex');
pswd = "'" + pswd + cipher.final('hex') + "',";
console.log(pswd);
// Assume I have variable with value
conn.query("INSERT INTO users VALUES (name, pswd)", function(err, rows, fields){
if(!err){
res.send(User);
} else{
console.log('Error while parsing the query...');
}
});
}
});
Войти
app.post('/login', function(req, res){
var pswds = cipher.update(req.body.pwd, 'utf8', 'hex');
pswds = "'" + pswds + cipher.final('hex') + "',";
pswds = "'" + pswds + "',";
console.log(pswds);
var query = conn.query("SELECT * FROM users WHERE phone='" + req.body.phone +
"AND pwd='" + pswds + "'", function(err, rows, fields){
const decipher = crypto.createDecipher('aes192', 'encryptedpwd');
var pswrd = decipher.update(rows[0].pwd, 'hex', 'utf8');
pswrd = pswrd + decipher.final('utf8');
pswrd = pswrd.substring(1, pswrd.length-2);
if(!err && req.body.pwd == pswrd){
res.send(rows[0]);
} else{
console.log('Error while parsing the query...');
}
});
});
Оставить о синтаксисе, он работает нормально. Но оба пароля при регистрации и регистрации не совпадают, даже я правильно ввел.
Вы никогда не должны шифровать пароли своего пользователя. Вместо этого вам нужно использовать хеширование, а некоторые сильные - PBKDF2, bcrypt, scrypt и Argon2. Поскольку хеш-функции являются однонаправленной, вы не сможете «расшифровать» хеши. Чтобы аутентифицировать пользователя, вы можете снова запустить пароль через хеш-функцию, чтобы сравнить с хешем, который хранится в базе данных. Подробнее: [Как безопасно использовать хэш-пароли?] (Http://security.stackexchange.com/q/211/45523) –
Используя хеш, я также должен сделать то же самое. Я должен дважды вызвать hash.digest. Если я это сделаю, произойдет ошибка. Если я хочу это сделать, мне также нужно вызвать обновление, которое приведет к разным зашифрованным строкам. Отвечайте на мой вопрос. Не комментируйте. @Artjom –