有什么方法可以使文本哈希保持一致

时间:2019-01-24 06:25:14

标签: c# sql .net

我正在尝试创建一种简单的方法来创建具有加密密码的新用户。但是,哈希结果似乎不一致。

除了创建用户之外,我还提供了一种方法来更改用户的当前密码,并且散列效果完美。

用户创建方法:

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手动查询的用户登录,而不能与使用该方法创建的用户登录。有办法解决这个问题吗?

0 个答案:

没有答案