如何在ActionResult中调用哈希算法

时间:2013-06-08 18:46:29

标签: c# asp.net-mvc-3

目前我正在寻找在ActionResult中散列密码的可能性。 具体来说,我想在公共ActionResult Edit(User user)中调用我的SHA512方法,以便在密码更改时对其进行哈希处理。

以下是Edit方法的代码:

    [HttpPost]
    public ActionResult Edit(User user)
    {
        if (ModelState.IsValid)
        {
            db.Entry(user).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(user);
    }

我实际上是ASP.NET新手,我真的不知道如何调用此方法来散列新密码(如果有的话):

    public static string SHA512(string value)
    {
        byte[] result;
        SHA512 sha512 = new SHA512Managed();
        result = sha512.ComputeHash(Encoding.Default.GetBytes(value));

        string hash = BitConverter.ToString(result).Replace("-", String.Empty); 

        return hash;
    }

1 个答案:

答案 0 :(得分:0)

首先从数据库中获取模型然后在其上调用TryUpdateModel来更新模型。然后为用户(u)添加新密码哈希,该密码从数据库中删除并保存。

附注:使用SHA散列密码非常糟糕,因为算法很快。请尝试使用PBKDF2

[HttpPost]
public ActionResult Edit(User user)
{
    var u = db.Users.Single(x => x.Id == user.Id);

    if (TryUpdateModel(u))
    {
        u.Password = SHA512(user.Password)
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(user);
}