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

时间:2014-06-25 15:14:01

标签: mysql asp.net custom-membershipprovider

我在连接到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;
    }

0 个答案:

没有答案