2

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

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

现在我想创建一个类似“ChangeEmail”的功能,但在此之前检查输入的密码是否正确。

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

问题是:

SimpleMembershipProvider 以什么方式加密密码?

我试过:

Crypto.HashPassword(currentPassword);

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

PasswordFormat 属性设置为 MembershipPasswordFormat.Hashed。

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

AIYlAKcmDaABMw1PVx1kheZq2KXkhVs4QjO7MnwfHPcTBjnmRobRqJzWYHYO/S4T7w==

这通过 Crypto.HashPassword:

AG+md+0W2EuV9BzUdohkYMK547jB5ochvxeVKYQTkls0UQ+3W0BWPHnFoffiIn2byw==

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

4

1 回答 1

6

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

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

于 2013-01-14T14:48:45.987 回答