如何在MVC.NET中的AspNetUsers表中验证用户的密码与哈希值?

时间:2016-01-07 07:21:46

标签: c# asp.net-mvc encryption hash passwords

我收到了两个字符串:用户名和密码,我根据该字符串检索 AspNetUser 的实例,其中包含相应的字段。我想生成相应的 Id ,但仅限于名称和通过签出。前者很简单,因为它是纯文本。

如果提供密码,我怎样才能验证哈希值是否正确?

我已经查看了默认模板中的代码几个小时,但我无法理解它。基于this page,我创建了自己的HASH,但是我与数据库中的on 不同,所以我猜测我和我#39;做错了或者在散列之前添加了一些魔法部分。

  

我的:E8B9C259EAB04BBB67B2D67AF5745B
  DB:AFczTgO67ViTWwZNejEiTyKRg5s96x5mOmwFFBj7yRUpys / 5duOw0q6I6imCm1t1hQ ==

见上文,你能发现差异......?使用的密码是" Abc123()",以防万一。

当我尝试使用 MD5CryptoServiceProvider 时,我是否在咆哮错误的树?在计算哈希值之前是否有一个默认字符串被插入到源中?

如果有关于最佳做法的评论,我当然可以向他们开放。但请记住,安全问题是我的弱点,已经困扰了我很长一段时间,所以这是方式我想去了解这个概念,一点一滴地说。如果可能的话,那就是。

我可以选择使用MS为我提供的设施,但我还没有做到这一点。在我看来,很多代码在这里做了什么,有些东西在那里"。

<system.web>
  <membership defaultProvider="donkey">
    <providers >
      <clear/>
      <add name="donkey" passwordFormat="Hashed" />
    </providers>
  </membership>
  <authentication mode="None" />
  <compilation debug="true" targetFramework="4.5.2" />
  <customErrors mode="Off"></customErrors>
  <httpRuntime targetFramework="4.5.2" />
</system.web>

1 个答案:

答案 0 :(得分:0)

您正在使用的Membership课程提供静态ValidateUser方法:

  

验证提供的用户名和密码是否有效。

public static bool ValidateUser(
  string username,
  string password
)


public void Login_OnClick(object sender, EventArgs args)
{
   if (Membership.ValidateUser(UsernameTextbox.Text, PasswordTextbox.Text))
      FormsAuthentication.RedirectFromLoginPage(UsernameTextbox.Text, NotPublicCheckBox.Checked);
   else
     Msg.Text = "Login failed. Please check your user name and password and try again.";
}