c# - SimpleMembershipProvider - 密码加密

标签 c# asp.net-mvc authentication encryption

我使用 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/

相关文章:

javascript - 同构应用程序中的用户配置文件

c# - try catch block 中的 "when"关键字是否与 if 语句相同?

c# - header - 类似于 C# 中的文件

javascript - Angular 上的分离函数

c# - Asp.Net Mvc 5 Azure Active Directory 获取用户配置文件图像并将其保存在服务器上

facebook - 将 facebook 身份验证用于浏览器扩展

c# - 实现 OpenID : identifying users

c# - 在 .NET 服务器上压缩/解压缩在客户端上使用 lz-string.js 编码的字符串

c# - Mongodb 使用 C# 驱动程序使用多个字段匹配更新嵌入式文档

JQuery 自动完成结果格式?