我实现了一个自定义成员资格提供程序。 我也实现了我自定义的AES Encryption/Decryption,覆盖了MembershipProvider的抽象EncryptPassword/DecryptPassword。加密/解密自定义MembershipProvider中的密码使用情况?
但是,当我触发ValidateUser时,密码不会自动转换,我是否错过了什么?
它应该被自动调用还是必须从我的代码中调用此方法?
我实现了一个自定义成员资格提供程序。 我也实现了我自定义的AES Encryption/Decryption,覆盖了MembershipProvider的抽象EncryptPassword/DecryptPassword。加密/解密自定义MembershipProvider中的密码使用情况?
但是,当我触发ValidateUser时,密码不会自动转换,我是否错过了什么?
它应该被自动调用还是必须从我的代码中调用此方法?
你需要自己调用你的加密程序。
因此,我可以将DecryptPassword函数声明为新的? 即公共新字符串DecriptPassword(byte [] password) 而不是基类模式public byte [] DecryptPassword(byte [] password)? – Shimmy 2009-06-28 07:14:47
您需要包括你的加密/解密方法的调用,像应该做的:
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;
}
我不熟悉的MembershipProvider,但它几乎总是不正确的存储解密密码。你应该使用像SHA256这样的单向散列。如果您必须使用该密码对另一个明文身份验证系统进行身份验证,则会出现异常。 – MichaelGG 2009-06-28 10:55:28
im将加密密码存储在varbinary中。 它们在用户登录时得到解密。 – Shimmy 2009-06-28 22:11:15