【问题标题】:How to verify user's password against hash value in AspNetUsers table in MVC.NET?如何根据 MVC.NET 中 AspNetUsers 表中的哈希值验证用户密码?
【发布时间】:2016-04-11 12:07:45
【问题描述】:

我正在接收两个字符串:用户名和密码,我正在根据它们检索 AspNetUser 的实例,它具有相应的字段。我想生成相应的 Id 但前提是名称并通过检查。前者很简单,因为它是纯文本。

如果提供的密码,我如何验证哈希值是否正确?

我已经看了几个小时默认模板中的代码,但我无法理解它。基于this page,我创建了自己的哈希值,但我得到的哈希值与数据库中的不同不同,所以我猜我做错了,或者他们在散列之前添加一些神奇的部分。

我的:E8B9C259EAB04BBB67B2D67AF5745B
数据库:AFczTgO67ViTWwZNejEiTyKRg5s96x5mOmwFFBj7yRUpys/5duOw0q6I6imCm1t1hQ==

见上图,你能看出区别吗...?使用的密码是“Abc123()”,以防万一。

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

如果有关于最佳实践的 cmets,我当然愿意接受。但是请记住,作为我的弱点的安全问题已经困扰了我很长时间,所以这是我想要了解这个概念的方式,具体到细节。如果可能的话,就是这样。

我可以选择使用 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>

【问题讨论】:

  • 我假设当您通过 aspnet 将密码保存到数据库中时,框架内部正在应用某种散列或加盐。有默认算法应用于密码。这个链接可能会帮助你stackoverflow.com/questions/1137368/…。您需要禁用此加盐功能,问题将得到解决。
  • 你能分享你的“”网页配置部分吗?
  • @UmerHayyat 不,我不能。我刚刚查看了解决方案中的每个配置文件,但我没有这样的标签。请注意,即使在与正在工作的模板相关的配置中也没有这样的标签(默认,普通登录/注册)。
  • 你想要一个可以根据比较结果返回真/假的方法吗?同样,如果您没有配置散列或加盐键,aspnet 会使用一个默认的,它附带成员资格。
  • @UmerHayyat 基本上,是的。我有一个获取 namepass 字符串的方法,我希望验证它是数据库中用户的正确组合(AspNetUser 表)。

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


【解决方案1】:

您正在使用的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.";
}

【讨论】:

  • 能否详细说明一下会员是如何设置的?
猜你喜欢
  • 2012-11-05
  • 2013-02-02
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多