2009-06-26 67 views
1

我想設置System.Web.Security.Membership.HashAlgorithmType(或通過web.config)到我創建的自定義加密類,在這個函數中我有加密和解密函數我想映射屬性值來使用這個類。如何使用自定義加密配置ASP.NET MembershipProvider?

我該怎麼做?

PS。我不介意改變加密類的結構,我的觀點是使用定製的加密類。

在此先感謝。

+0

您使用的是內置的SqlMembershipProvider或者你寫你自己的自定義成員資格的供應商? – 2009-06-26 05:05:03

回答

0

我把下面的到的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); ; 
} 
相關問題