SimpleMembershipProvider - 密码加密

时间:2013-01-14 00:27:45

标签: c# asp.net-mvc authentication encryption

我使用SimpleMembershipProvider作为我的数据库提供程序。

我已经添加了新功能来通过继承改进此提供程序。

现在我想创建一个像“ChangeEmail”这样的函数,但在此之前检查输入的密码是否正确。

所以我必须加密输入的密码并将结果与​​我的数据库中的条目进行比较。

问题是:

SimpleMembershipProvider以什么方式加密密码?

我试过了:

Crypto.HashPassword(currentPassword);

结果与数据库中的结果相似但不一样。

PasswordFormat属性设置为MembershipPasswordFormat.Hashed。

例如,注册时生成的“123456”哈希:

AIYlAKcmDaABMw1PVx1kheZq2KXkhVs4QjO7MnwfHPcTBjnmRobRqJzWYHYO/S4T7w==

这是通过Crypto.HashPassword:

AG+md+0W2EuV9BzUdohkYMK547jB5ochvxeVKYQTkls0UQ+3W0BWPHnFoffiIn2byw==

它看起来像是相同类型的编码,但为什么结果不同?

1 个答案:

答案 0 :(得分:6)

Crypto.HashPassword为每个调用生成一个新的salt,因此每次输出都不同。验证使用Crypto.VerifyHashedPassword

或者直接使用Rfc2898DeriveBytes。这允许您调整散列成本,并且可以避免使用大于本机大小(20字节)的散列。