开门见山:
我在哪里可以将密码哈希加密算法放在 Membership Provider 中?或者:微软团队将加密方法放在哪里?
因为:我选择让它散列,但最终在我的数据库中的密码是普通的。
非常感谢 :)
- - - 更新
抱歉没有提及,我使用我自己的自定义提供程序。
开门见山:
我在哪里可以将密码哈希加密算法放在 Membership Provider 中?或者:微软团队将加密方法放在哪里?
因为:我选择让它散列,但最终在我的数据库中的密码是普通的。
非常感谢 :)
- - - 更新
抱歉没有提及,我使用我自己的自定义提供程序。
这是在您的 webconfig 的Membership Provider 配置中指定的,使用add 元素:
<!-- SqlMembershipProvider syntax -->
<add name="string"
type="string"
connectionStringName="string"
applicationName="MyApplication"
commandTimeout
description
enablePasswordRetrieval="false"
enablePasswordReset="true"
passwordFormat="Hashed"
minRequiredPasswordLength
minRequiredNonalphanumericCharacters
passwordStrengthRegularExpression
/>
默认算法是 SHA1,在成员资格提供程序中定义,但如果您想使用该hashAlgorithmType
属性,您可以覆盖它:
<membership
defaultProvider="provider name"
userIsOnlineTimeWindow="number of minutes"
hashAlgorithmType="SHA1">
<providers>...</providers>
</membership>
有关提供您自己的算法的更多详细信息,请参阅“将算法名称映射到密码学类”。
请注意,该格式会覆盖密码检索之类的内容 - 无法检索散列密码,如果在散列密码时对其调用 GetPassword,则提供程序应返回异常(请参阅EnablePasswordRetrieval属性)。
如果您已经编写了自己的 MembershipProvider,我建议您看一下“如何:示例成员资格提供程序实现”,尤其是方法EncodePassword
和UnencodePassword
.
不确定,但我认为密码以纯文本形式保存,因为启用了“密码检索”。您可以通过在 Web.config 中设置 <membership ... enablePasswordRetrieval="False"/> 来禁用此功能。
它是 XML 配置中提供程序的一个选项。文档显示您刚刚设置了“passwordFormat='hashed'”。