Anstatt den Benutzernamen und das Passwort direkt im Cookie zu speichern, speichern Sie den Benutzernamen und einen Hash des Passworts und ein Salz im Cookie, dann, wenn Sie das Cookie authentifizieren, das Passwort für den angegebenen Benutzernamen abrufen, neu erstellen den Hash mit dem Passwort und dem gleichen Salz und vergleiche sie.
Erstellen des Hash ist so einfach wie das Speichern der Passwort und Salt-Werte zusammen in einer Zeichenfolge, die Umwandlung der Zeichenfolge in eine Byte-Array, Berechnung der Hash-Wert der Byte-Array (mit MD5 oder was auch immer Sie bevorzugen) und die Konvertierung der resultierenden Hash zu einer Zeichenfolge (wahrscheinlich über Base64-Codierung).
Hier einige Beispiel-Code:
// Create a hash of the given password and salt.
public string CreateHash(string password, string salt)
{
// Get a byte array containing the combined password + salt.
string authDetails = password + salt;
byte[] authBytes = System.Text.Encoding.ASCII.GetBytes(authDetails);
// Use MD5 to compute the hash of the byte array, and return the hash as
// a Base64-encoded string.
var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hashedBytes = md5.ComputeHash(authBytes);
string hash = Convert.ToBase64String(hashedBytes);
return hash;
}
// Check to see if the given password and salt hash to the same value
// as the given hash.
public bool IsMatchingHash(string password, string salt, string hash)
{
// Recompute the hash from the given auth details, and compare it to
// the hash provided by the cookie.
return CreateHash(password, salt) == hash;
}
// Create an authentication cookie that stores the username and a hash of
// the password and salt.
public HttpCookie CreateAuthCookie(string username, string password, string salt)
{
// Create the cookie and set its value to the username and a hash of the
// password and salt. Use a pipe character as a delimiter so we can
// separate these two elements later.
HttpCookie cookie = new HttpCookie("YourSiteCookieNameHere");
cookie.Value = username + "|" + CreateHash(password, salt);
return cookie;
}
// Determine whether the given authentication cookie is valid by
// extracting the username, retrieving the saved password, recomputing its
// hash, and comparing the hashes to see if they match. If they match,
// then this authentication cookie is valid.
public bool IsValidAuthCookie(HttpCookie cookie, string salt)
{
// Split the cookie value by the pipe delimiter.
string[] values = cookie.Value.Split('|');
if (values.Length != 2) return false;
// Retrieve the username and hash from the split values.
string username = values[0];
string hash = values[1];
// You'll have to provide your GetPasswordForUser function.
string password = GetPasswordForUser(username);
// Check the password and salt against the hash.
return IsMatchingHash(password, salt, hash);
}
@Erik habe ich alle diese in einer Klasse enthalten .. Wie man sie auf meine Schaltfläche klicken? –
Ich nehme an, Sie meinen Ihre Login-Taste: In diesem Fall, erhalten Sie einfach den Benutzernamen und das Passwort wie gewohnt, rufen Sie die 'CreateAuthCookie' Methode geben Sie den Benutzernamen, Passwort und Salz (das ist wirklich nur eine beliebige Zeichenfolge, solange Wenn Sie für jeden Methodenaufruf dasselbe verwenden, dann tun Sie, was Sie möchten, mit dem Cookie, den diese Methode zurückgibt. –
Wenn es an der Zeit ist zu sehen, ob der Benutzer bereits angemeldet ist, finden Sie nur Ihr Cookie nach Name (das 'YourSiteCookieNameHere'), und rufen Sie die 'IsValidAuthCookie' Methode auf, um die Werte in diesem Cookie mit den tatsächlichen Authentifizierungsdaten zu vergleichen Datenbank. Vergessen Sie nicht, das gleiche Salz zu verwenden. –