我正在使用ASP.NET身份验证MVC5中的成员身份,并且有一个供admin用户管理用户和角色的页面。我试图让管理员更改任何其他用户的密码,如果他需要这样做。我使用这个代码来执行任务:UserManager.AddPassword不能按预期工作
userManager.RemovePassword(userId);
userManager.AddPassword(userId, newPassword);
似乎很简单,但是当我试图用我刚刚创建,我不能将新密码登录;我收到无效的密码信息。
我试图通过试图找出如何散列密码,进一步研究这个问题,并发现了这一点:
string hashed = userManager.PasswordHasher.HashPassword("some password");
首先,我假设这个密码散列器就是AddPassword()
内部使用。其次,我注意到每次运行HashPassword('some password')
时,都会得到一个完全不同的散列给我。
我不明白这一点...
HashPassword使用salt值来随机化散列,这就是为什么每次使用所有HashPassword时都会得到不同的值。盐值使得攻击者无法使用字典攻击,只要他们能够查看哈希密码来找出未经哈希的版本。 验证密码时再次使用此salt值。 – 2014-10-08 04:26:21
@ErikFunkenbusch好吧,够用了,但是我不能用我传递给'AddPassword()'的密码登录? – Matt 2014-10-08 12:07:26