Ответ 1
Создайте класс, который наследуется от SqlMembershipProvider, и в нем вы можете вызвать decrypt.
Весь код, который вам нужен для этого, можно найти в в этой статье Навеена Кохли:
После просмотра кода в отражателе я увидел, что Microsoft провайдеры дешифруют в два этапа. Зашифрованный пароль на самом деле является Base64 преобразование зашифрованных данных. Поэтому сначала он преобразует его из Base64, а затем вызывает метод DecryptPassword. Я просто сделал самый легкий вещь. Скопировал код из реализации Microsoft, удалил все проверяет, что он делает, а затем использовал его. Следующий класс - пример производная от класса форма SqlMembershipProvider с методом, который просто возвращает пароль в текстовом виде для заданного зашифрованного пароля.
namespace MembershipPasswordRecover { public class NetFourMembershipProvider : SqlMembershipProvider { public string GetClearTextPassword(string encryptedPwd) { byte[] encodedPassword = Convert.FromBase64String(encryptedPwd); byte[] bytes = this.DecryptPassword(encodedPassword); if (bytes == null) { return null; } return Encoding.Unicode.GetString(bytes, 0x10, bytes.Length - 0x10); } } } static void Main(string[] args) { var passwordManager = new NetFourMembershipProvider(); var clearPWd = passwordManager.GetClearTextPassword("encryptedpasswordhere"); Console.WriteLine(clearPWd); }