0

我实现了一个自定义成员资格提供程序。 我也实现了我自定义的AES Encryption/Decryption,覆盖了MembershipProvider的抽象EncryptPassword/DecryptPassword。加密/解密自定义MembershipProvider中的密码使用情况?

但是,当我触发ValidateUser时,密码不会自动转换,我是否错过了什么?

它应该被自动调用还是必须从我的代码中调用此方法?

+1

我不熟悉的MembershipProvider,但它几乎总是不正确的存储解密密码。你应该使用像SHA256这样的单向散列。如果您必须使用该密码对另一个明文身份验证系统进行身份验证,则会出现异常。 – MichaelGG 2009-06-28 10:55:28

+0

im将加密密码存储在varbinary中。 它们在用户登录时得到解密。 – Shimmy 2009-06-28 22:11:15

回答

2

你需要自己调用你的加密程序。

+0

因此,我可以将DecryptPassword函数声明为新的? 即公共新字符串DecriptPassword(byte [] password) 而不是基类模式public byte [] DecryptPassword(byte [] password)? – Shimmy 2009-06-28 07:14:47

0

您需要包括你的加密/解密方法的调用,像应该做的:

public override bool ValidateUser(string username, string password) 
{ 
    string password=query to get the password from the db/users_list; 

    return (CheckPassword(password, storedPassword)); 
} 

private bool CheckPassword(string password, string dbpassword) 
{ 
    string pwd1 = password; 
    string pwd2 = dbpassword; 

    pwd2 = UEncodePassword(dbpassword); 

    if (pwd1 == pwd2) return true; 

    return false; 
} 

private string UEncodePassword(string encodedPassword) 
{ 
    string password = encodedPassword; 
    password = Encoding.Unicode.GetString(DecryptPassword(Convert.FromBase64String(encodedPassword))); 

    return password; 
}