Aspnet_Membershipテーブルにある暗号化された(ハッシュされていない)パスワードを復号化する必要があります。そのデータベースには、Password(Encrypted)フィールドとPasswordSaltフィールドがあり、web.configを調べて、machinekey> decodeionKey(validation = "SHA1" decodeion = "AES")を見つけることができます。
注:ハッシュ化されたパスワードを使用したいのですが、ビジネス上の理由から、他のリモートシステムとの間のSSOのために、メンバーのパスワードを使用できる必要があります。したがって、暗号化を使用します(間違いなくClearを使用しない-yukky!)
それをすべて考えると、パスワードを明確でわかりやすく読みやすいテキスト、つまり復号化して取得する方法は確かにありますが、ウェブサイトを見つけたり、stackoverflowで答えたりするのに本当に苦労しています(そして私はすべての「類似したこれを行う方法を説明する「質問」および「同様のタイトルの質問」はこちら)。
MembershipProvider.DecryptPassword Method ページを見つけましたが、コードでこれを実際に使用する方法をまだ理解できません。 Google経由で他のページも見つけましたが、パスワードの復号化のほとんどの例では、saltとdecrytionKeyが考慮されていないようです。
誰かがそれぞれの場所からパスワード、passwordsalt、decryptykeyを選択し、それらを使用してASP.NET 2.0メンバーシップ暗号化パスワードを暗号化する簡単な例を持っていますか?
SqlMembershipProviderから継承するクラスを作成し、その中で復号化を呼び出すことができます。
これに必要なすべてのコードは Naveen Kohliによるこの記事 にあります:
リフレクターのコードを調べたところ、Microsoftプロバイダーが2つのステップで復号化することがわかりました。暗号化されたパスワードは、実際には暗号化されたデータの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); }