Mysql asp.net自定义成员资格提供程序验证密码

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

我正在连接到mysql数据库的asp.net web应用程序中实现自定义成员资格提供程序。我使用ASP.NET配置来设置用户。在web.config中,我将hashAlgorithmType设置为HMACSHA512。当我在mysql中查看my_aspnet_membership表时,有两列:Password和PasswordKey

对于登录,我知道我需要散列提供的密码,并检查它是否与数据库中的密码相同

我创建了一个密码为test123的用户,在数据库中散列的密码是a590ayanpdm2czo+hygdr9ve6sg1jpxyj7fdt2nconb2pekrxd7hd/sr3rL7AwNUK8UHoz6SjdOhCsNDk1GQ==并且密码键是Ni3lsEK1nc/7mFObHQMmtg==

当我试图用给定的密钥验证正确的密码时,它失败了,我不知道为什么

有人能帮我吗

代码:


问题出在哪里?我可能误解了,或者只是使用了旧版本的会员资格提供程序,但据我所知,用户的哈希密码是由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;
    }