2009-06-26 6 views
1

Je souhaite définir System.Web.Security.Membership.HashAlgorithmType (ou thru web.config) sur une classe de cryptographie personnalisée que j'ai créée. Dans cette fonction, j'ai les fonctions Encrypt et Decrypt. Je souhaite mapper la valeur de la propriété pour utiliser cette classe.Comment configurer ASP.NET MembershipProvider avec une cryptographie personnalisée?

Comment faire?

PS. Cela ne me dérange pas de changer la structure de la classe de chiffrement, mon point utilise une classe de chiffrement personnalisée.

Merci d'avance.

+0

utilisez-vous SqlMembershipProvider ou intégré que vous avez écrit votre propre fournisseur d'appartenances personnalisé? –

+0

J'utilise un MembershipProvider personnalisé – Shimmy

Répondre

0

J'ai placé ce qui suit dans la mise en œuvre MembershipProvider:

string PasswordEncryptionKey = "the Key"; //should be set somewhere else 
internal static byte[] EncryptPassword(string password) 
{ 
    MD5CryptoServiceProvider hash = new MD5CryptoServiceProvider(); 
    byte[] key = hash.ComputeHash(
        UTF8Encoding.UTF8.GetBytes(PasswordEncryptionKey)); 
    hash.Clear(); 

    RijndaelManaged rm = new RijndaelManaged(); 
    rm.Key = key; 
    rm.Mode = CipherMode.ECB; 
    rm.Padding = PaddingMode.PKCS7; 

    ICryptoTransform transform = rm.CreateEncryptor(); 
    byte[] bytes = UTF8Encoding.UTF8.GetBytes(password); 
    byte[] result = transform.TransformFinalBlock(bytes, 0, bytes.Length); 
    rm.Clear(); 
    return result; 
} 

internal new static string DecryptPassword(byte[] encodedPassword) 
{ 
    MD5CryptoServiceProvider hash = new MD5CryptoServiceProvider(); 
    byte[] key = hash.ComputeHash(
          UTF8Encoding.UTF8.GetBytes(PasswordEncryptionKey)); 
    hash.Clear(); 

    RijndaelManaged rm = new RijndaelManaged(); 
    rm.Key = key; 
    rm.Mode = CipherMode.ECB; 
    rm.Padding = PaddingMode.PKCS7; 

    ICryptoTransform transform = rm.CreateDecryptor(); 
    byte[] result = transform.TransformFinalBlock(
           encodedPassword, 0, encodedPassword.Length); 
    rm.Clear(); 
    return UTF8Encoding.UTF8.GetString(result); ; 
} 
Questions connexes