我正在使用asp.net身份并需要加密密码以将其与存在于数据库中的PasswordHash进行比较。
这是我的代码:
var passHash = new PasswordHasher().HashPassword("123456");
using (EFDbContext _db = new EFDbContext())
{
var users = _db.Users.Where(u => u.PasswordHash == passHash);
}
我收到一个空的结果,但在数据库中存在密码为“123456”的用户
答案 0 :(得分:1)
密码哈希通常使用PasswordHasher类中的VerifyHashedPassword方法进行比较,这就是您的代码无效的原因,请查看以下链接:
如果你必须使用该密码检索用户,我认为你不能使用EF(它无法将VerifyHashedPassword方法转换为sql查询),你必须检索所有用户并比较密码对于每一个。
如果您只想检索单个用户,我会通过电子邮件进行搜索,并使用VerifyHashedPassword比较密码。