Решение Грега - хорошее начало, но оно не повлияет на существующих пользователей.SqlMembershipProvider защищает существующих пользователей и пароли, сохраняя PasswordFormat (0 = очистить, 1 = хешированный, 2 = зашифрованный) в таблице вместе с паролями.Изменение формата пароля поставщика влияет только на вставки в пользовательские таблицы.Чтобы преобразовать пароли существующих пользователей в хэшированные, необходимо изменить параметр PasswordFormat для каждой записи.Вот простой способ сделать это:
void HashAllPasswords()
{
var clearProvider = Membership.Providers["SqlProvider_Clear"];
var hashedProvider = Membership.Providers["SqlProvider_Hashed"];
int dontCare;
if (clearProvider == null || hashedProvider == null) return;
var passwords = clearProvider.GetAllUsers(0, int.MaxValue, out dontCare)
.Cast<MembershipUser>().ToDictionary(u => u.UserName, u => u.GetPassword());
using (var conn = new SqlConnection(
ConfigurationManager.ConnectionStrings[0].ConnectionString))
{
conn.Open();
using (var cmd = new SqlCommand(
"UPDATE [aspnet_Membership] SET [PasswordFormat]=1", conn))
cmd.ExecuteNonQuery();
}
foreach (var entry in passwords)
{
var resetPassword = hashedProvider.ResetPassword(entry.Key, null);
hashedProvider.ChangePassword(entry.Key, resetPassword, entry.Value);
}
}