【发布时间】:2018-07-14 21:35:36
【问题描述】:
我想使用 SHA1 哈希算法存储(插入)和获取(检索)密码,因为它比以纯文本形式存储密码更好。在我的数据库中插入users 表时,插入了 SHA1 哈希,但是在登录时它不成功。我需要在我的 Javascript 文件中修改我的功能代码吗?
我正在使用带有 POST 方法的 HTML 登录表单。
这需要执行我的函数文件中的 SQL 代码。
function authenticate(request, respond) {
var input_username = request.body.username; // username from user input
var input_password = request.body.password; // password from user input
var msg = "";
// Call the getLoginDetails function from DB
DB.getLoginDetails(input_username, function(error, result) {
if (error) {
respond.json(error);
} else {
// If user can be found, result has one record
if (result.length > 0) {
if (input_password == result[0].password) {
msg = "Successful.";
console.log(msg);
} else {
msg = "Failed.";
console.log(msg);
}
} else { // If user not found, result has no record
msg = "User not found!";
}
更改前(DB.js)文件。
insertData(user, callback) {
var sql = "INSERT INTO users (`id`,`username`,`password`) VALUES(?,?,?)";
db.query(sql, [user.getId(), user.getUsername(), user.getPassword()], callback)
}
getLoginDetails(user, callback) {
var sql = "SELECT password FROM users WHERE username = ?";
db.query(sql, [user], callback);
}
修改后 (DB.js) 文件
//Insert user with SHA1 algorithm
insertData(user, callback) {
var sql = "INSERT INTO users (`id`,`username`,`password`) VALUES(?,?,SHA1(?))";
db.query(sql, [user.getId(), user.getUsername(), user.getPassword()], callback)
}
//Login with SHA1 algorithm
getLoginDetails(user, callback) {
var sql = "SELECT SHA1(password) FROM users WHERE username = ?";
db.query(sql, [user], callback);
}
【问题讨论】:
-
我将您的问题回滚到原始版本。如果您想突出显示您尝试过的其他事情,请在问题末尾添加更新。
-
SHA1,尤其是在未加盐的情况下,根本不足以作为密码哈希。 security.stackexchange.com/q/211/32112
标签: javascript mysql sha1