кажется, вы уже знаете, как расшифровать пароли и изменить файл web.config, но вы застряли на том, как реализовать остальную часть процесса.
с использованием ILSpy Вот как сгенерировать соль для каждого пользователя:
byte[] array = new byte[16];
new RNGCryptoServiceProvider().GetBytes(array);
return Convert.ToBase64String(array);
Как только вы получите соль, вот как сгенерировать пароль:
byte[] bytes = Encoding.Unicode.GetBytes(pass);
byte[] array = Convert.FromBase64String(salt);
byte[] array2 = new byte[array.Length + bytes.Length];
Buffer.BlockCopy(array, 0, array2, 0, array.Length);
Buffer.BlockCopy(bytes, 0, array2, array.Length, bytes.Length);
using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider()) {
return Convert.ToBase64String(sha1.ComputeHash(array2));
}
, где pass
- это обычныйтекстовый пароль , который вы вычислили, а salt
- строка, вычисленная в первом фрагменте кода выше. алгоритм по умолчанию - SHA1 , если вам интересно, почему он используется.
, поскольку это однократный процесс, я бы написал обработчик HTTP, чтобы вручную обновлять базу данных во времякороткий, плановый период обслуживания - надеюсь, у вас есть такая роскошь.(очевидно, сделайте резервную копию и протестируйте сначала).Вам необходимо обновить следующие поля в таблице aspnet_Membership
:
Password
- рассчитано выше PasswordFormat
- 1 PasswordSalt
-рассчитано выше
никогда не приходилось делать ничего подобного, но, надеюсь, это поможет вам начать:)