Mysql asp.net自定义成员资格提供程序验证密码
我正在连接到mysql数据库的asp.net web应用程序中实现自定义成员资格提供程序。我使用ASP.NET配置来设置用户。在web.config中,我将hashAlgorithmType设置为HMACSHA512。当我在mysql中查看my_aspnet_membership表时,有两列:Password和PasswordKey 对于登录,我知道我需要散列提供的密码,并检查它是否与数据库中的密码相同 我创建了一个密码为test123的用户,在数据库中散列的密码是a590ayanpdm2czo+hygdr9ve6sg1jpxyj7fdt2nconb2pekrxd7hd/sr3rL7AwNUK8UHoz6SjdOhCsNDk1GQ==并且密码键是Ni3lsEK1nc/7mFObHQMmtg== 当我试图用给定的密钥验证正确的密码时,它失败了,我不知道为什么 有人能帮我吗 代码:Mysql asp.net自定义成员资格提供程序验证密码,mysql,asp.net,custom-membershipprovider,Mysql,Asp.net,Custom Membershipprovider,我正在连接到mysql数据库的asp.net web应用程序中实现自定义成员资格提供程序。我使用ASP.NET配置来设置用户。在web.config中,我将hashAlgorithmType设置为HMACSHA512。当我在mysql中查看my_aspnet_membership表时,有两列:Password和PasswordKey 对于登录,我知道我需要散列提供的密码,并检查它是否与数据库中的密码相同 我创建了一个密码为test123的用户,在数据库中散列的密码是a590ayanpdm2czo
问题出在哪里?我可能误解了,或者只是使用了旧版本的会员资格提供程序,但据我所知,用户的哈希密码是由HASHpasswordSalt+plainTextPassword组成的。我假设Hash.Key=PasswordKey实际上是指盐?如果是这样,那可能是你的问题
private bool CheckPassword(string password, string dbpassword)
{
string pass1 = password;
string pass2 = dbpassword;
switch (config.getMembershipData().PasswordFormat)
{
case MembershipPasswordFormat.Encrypted:
pass2 = UnEncodePassword(dbpassword);
break;
case MembershipPasswordFormat.Hashed:
pass1 = EncodePassword(password);
break;
default:
break;
}
if (pass1 == pass2)
{
return true;
}
return false;
}
// EncodePassword
private string EncodePassword(string password)
{
string encodedPassword = password;
switch (config.getMembershipData().PasswordFormat)
{
case MembershipPasswordFormat.Clear:
break;
case MembershipPasswordFormat.Encrypted:
encodedPassword = Convert.ToBase64String(EncryptPassword(Encoding.Unicode.GetBytes(password)));
break;
case MembershipPasswordFormat.Hashed:
HMACSHA512 hash = new HMACSHA512();
hash.Key = **PasswordKey**;
encodedPassword = Convert.ToBase64String(hash.ComputeHash(Encoding.Unicode.GetBytes(password)));
break;
default:
throw new ProviderException("Unsupported password format.");
}
return encodedPassword;
}