2009-06-26 30 views
1

私は作成したカスタム暗号化クラスにSystem.Web.Security.Membership.HashAlgorithmType(またはweb.configを介して)を設定したいと思います。この関数では暗号化と復号化関数があり、このクラスを使用するためにプロパティ値をマップしたいと考えています。ASP.NET MembershipProviderをカスタム暗号化で設定するには?

どうすればよいですか?

PS。私は暗号クラス '構造体を変更しても構いません。私の指摘はカスタム暗号クラスを使用しています。

ありがとうございます。

+0

あなたは作り付けのSqlMembershipProviderを使用しているか、独自のカスタムメンバシッププロバイダを書かれていますか? –

+0

私はカスタムMembershipProviderを使用します – Shimmy

答えて

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); ; 
} 
関連する問題