我實現了一個自定義成員資格提供程序。 我也實現了我自定義的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