我使用 SimpleMembershipProvider 作为我的数据库提供程序。
我已经添加了新函数来通过继承改进此提供程序。
现在我想创建一个像“ChangeEmail”这样的函数,但在此之前检查输入的密码是否正确。
所以我必须加密输入的密码并将结果与数据库中的条目进行比较。
问题是:
SimpleMembershipProvider 以什么方式加密密码?
我尝试过:
Crypto.HashPassword(currentPassword);
结果与数据库中的结果相似但不一样。
PasswordFormat 属性设置为 MembershipPasswordFormat.Hashed。
例如,注册时生成的“123456”的哈希值:
AIYlAKcmDaABMw1PVx1kheZq2KXkhVs4QjO7MnwfHPcTBjnmRobRqJzWYHYO/S4T7w==
这是通过 Crypto.HashPassword 实现的:
AG+md+0W2EuV9BzUdohkYMK547jB5ochvxeVKYQTkls0UQ+3W0BWPHnFoffiIn2byw==
看起来是同一种编码,但为什么结果不同?
最佳答案
Crypto.HashPassword
为每次调用生成一个新的盐,因此每次的输出都会不同。要验证,请使用Crypto.VerifyHashedPassword
。
或者直接使用Rfc2898DeriveBytes
。这允许您调整哈希成本,并且可以避免使用大于 native 大小(20 字节)的哈希。
关于c# - SimpleMembershipProvider - 密码加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14309900/