Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ActionResult中调用哈希算法_C#_Asp.net Mvc 3 - Fatal编程技术网

C# 如何在ActionResult中调用哈希算法

C# 如何在ActionResult中调用哈希算法,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,目前我正在寻找在ActionResult中散列密码的可能性。 具体来说,我想在publicActionResult Edit(User-User)中调用我的SHA512方法,以便在密码被更改时对其进行散列 以下是Edit方法的代码: [HttpPost] public ActionResult Edit(User user) { if (ModelState.IsValid) { db.Entry(user).Sta

目前我正在寻找在
ActionResult
中散列密码的可能性。 具体来说,我想在public
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;
    }

首先从数据库中获取模型,然后在其上调用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);
}

非常感谢@Steve:)你说使用SHA对密码进行哈希是非常糟糕的,因为算法很快,这是什么意思?@user2391883你可以非常快地对计算机进行哈希运算,这意味着如果有人偷了你的哈希表,他会非常快地对它进行暴力破解。密码算法必须很慢,所以暴力攻击几乎毫无用处,因为它需要永远的时间。另外,如果有人回答了你的问题,你最好将其标记为已回答。@user2391883在我看来,史蒂夫并不完全正确!SHA512(更好的是盐渍SHA512)是一个非常好的保护密码的方法。你可以看看这个,它计算出用蛮力破解SHA512哈希需要3,17*10^64年。如果我理解错了,史蒂夫,请告诉我@Steve我正在使用Microsoft的SHA512类。稍后,我将向这些散列值添加一个Salt。我想应该是安全的:)再次感谢你的回答