【发布时间】: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 基本上,是的。我有一个获取 name 和 pass 字符串的方法,我希望验证它是数据库中用户的正确组合(AspNetUser 表)。
标签: c# asp.net-mvc encryption hash passwords