我在连接到mysql数据库的asp.net Web应用程序中实现自定义成员资格提供程序。我使用ASP.NET配置来设置用户。在web.config中,我将hashAlgorithmType设置为" HMACSHA512"。当我查看mysql中的my_aspnet_membership表时,有两列:"密码"和" PasswordKey"。
对于Login,我知道我需要对提供的密码进行哈希处理,并检查它是否与数据库中的相同。
我创建了一个密码为" test123"的用户,在数据库中,哈希密码是" a590AyAnPrdm2CZO + HyGdr9VE6sg1jPXYj7Fdt2NCoCnb2pEKRXd7HD / sr3rL7AwNUK8UHoz6SjdOhCsNDk1GQ =="密码密钥是" Ni3lsEK1nc / 7mFObHQMmtg =="。
当我尝试使用给定密钥验证正确的密码时,它失败了,我不知道为什么。
有没有人可以帮助我?
代码:
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;
}