我正在尝试创建一种简单的方法来创建具有加密密码的新用户。但是,哈希结果似乎不一致。
除了创建用户之外,我还提供了一种方法来更改用户的当前密码,并且散列效果完美。
用户创建方法:
public IActionResult Create(USERS uSERS)
{
if (ModelState.IsValid)
{
DbSet<USERS> dbs = _dbContext.USERS;
var sql = String.Format($@"INSERT INTO [USERS] ([emailId],
[password], [fullName], [role]) VALUES
('{uSERS.emailId}', HASHBYTES('SHA1', '{uSERS.password}'),
'{uSERS.fullName}', '{uSERS.role}') ");
if (_dbContext.Database.ExecuteSqlCommand(sql) == 1)
{
ViewData["Msg"] = "New user created";
}
else
{
ViewData["Msg"] = "Failed to update database!";
}
}
else
{
ViewData["Msg"] = "Invalid information entered";
}
return RedirectToAction("Index");
}
更改密码方法:
public IActionResult ChangePassword(PasswordUpdate pu)
{
var userid = User.FindFirst(ClaimTypes.NameIdentifier).Value;
var sql = String.Format($"UPDATE USERS SET password = HASHBYTES('SHA1', '{pu.NewPassword}') WHERE emailId='{userid}' AND password = HASHBYTES('SHA1', '{pu.CurrentPassword}')");
if (_dbContext.Database.ExecuteSqlCommand(sql) == 1)
ViewData["Msg"] = "Password successfully updated!";
else
ViewData["Msg"] = "Failed to update password!";
return View();
}
手动SQL查询:
INSERT INTO [USER] ([emailId], [password], [fullName], [role]) VALUES
('admin@test.com', HASHBYTES('SHA1','password'), 'ADMIN', 'Admin')
我总是将'password'作为用户的密码测试,这是哈希结果:
手动SQL查询:0x5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8
使用更改密码:0x5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8
使用创建用户:0xFE5991ECC64EEC87AB37BDB0FF01F3976080D398
我认为不必说我可以与手动创建VIA手动查询的用户登录,而不能与使用该方法创建的用户登录。有办法解决这个问题吗?