Как настроить ASP.NET MembershipProvider с настраиваемой криптографией?

Я хочу установить System.Web.Security.Membership.HashAlgorithmType (или через web.config) в пользовательский класс криптографии, который я создал. В этой функции у меня есть функции шифрования и дешифрования. Я хочу сопоставить значение свойства для использования этого класса.

Как мне это сделать?

PS. Я не против изменить структуру криптокласса, моя точка зрения заключается в использовании настраиваемого криптокласса.

Заранее спасибо.


person Shimmy Weitzhandler    schedule 26.06.2009    source источник
comment
вы используете встроенный SqlMembershipProvider или вы написали собственный пользовательский поставщик членства?   -  person this. __curious_geek    schedule 26.06.2009
comment
Я использую собственный MembershipProvider   -  person Shimmy Weitzhandler    schedule 26.06.2009


Ответы (1)


Я поместил в реализацию 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); ;
}
person Shimmy Weitzhandler    schedule 23.07.2009