使用SHA1哈希密码和AspNet.Identity 2.0的登录错误

时间:2018-07-12 07:17:16

标签: asp.net asp.net-mvc-5 asp.net-identity sha1 database-first

我正在尝试将AspNet.Identity 2.0与数据库优先方法一起使用。我已成功将所需的表映射到我的数据库,并且能够运行我的应用程序并注册我的用户。我遇到的问题是,当我注销用户并尝试再次登录时,在浏览器中收到一条错误消息,内容为:

  

输入内容不是有效的Base-64字符串,因为它包含非Base 64字符,两个以上的填充字符或填充字符中的非法字符

错误源似乎是下面的行,总是返回失败:

  

var结果=等待SignInManager.PasswordSignInAsync(user.UserName,model.Password,model.RememberMe,shouldLockout:false);

我已使用以下代码对密码进行哈希处理以存储在数据库中:

public class MyPasswordHasher : PasswordHasher
{
    public override string HashPassword(string password)
    {
        var textToHash = Encoding.Default.GetBytes(password);
        using (SHA1Managed sha1 = new SHA1Managed())
        {
            var result = sha1.ComputeHash(textToHash);
            var resultText =  Convert.ToBase64String(result);
            resultText = resultText.Replace("+", "_");
            return resultText;
        }
    }

    public override PasswordVerificationResult VerifyHashedPassword(
      string hashedPassword, string providedPassword)
    {
        return hashedPassword.Equals(HashPassword(providedPassword)) ? PasswordVerificationResult.Success : PasswordVerificationResult.Failed;

    }
}

同样,当我使用以下方法在登录时检查用户密码时,它总是返回false:

  

SignInManager.UserManager.CheckPassword(user,model.Password);

请帮助我消除这些错误。到目前为止,我遇到的最接近的问题是:ASP.Net Identity Manual Password Hashing ---并不能完全解决我遇到的这个错误。 谢谢。

0 个答案:

没有答案