-2

ユーザーパスワードを暗号化せずに取得したいのですが。これを取得する方法は?

 public static string GetCurrentUserPassword(string userName)
 {
     MembershipProvider p = (MembershipProvider)Membership.Providers["Default"];
     MembershipUser obj = Membership.GetUser(userName);
    return obj.GetPassword();             
 }  


obj type : [Telerik.Sitefinity.Security.Model.User] = User "user1", Id={59d9813c-f88e-4790-9f19-3145ba8347d1}, Provider="Default"

password : "+HmReh/mzvIIuvYsM7+XdEoeQhI="
4

3 に答える 3

6

暗号化されていないパスワードを取得できると期待するのはなぜですか?

保存されたパスワードでできるはずの唯一の考えは、ユーザーが入力したパスワードの有効性を確認するためにそれを使用することです。入力したばかりのパスワードに同じ変換を適用し(適切な場合は同じソルトを使用)、同じハッシュになるかどうかを確認する一方向ハッシュ(および同様の手法)の場合。

リバーシブルなパスワードの表現を保存しないでください。つまり、攻撃者がデータベース(および秘密鍵)にアクセスした場合、攻撃者はユーザーのパスワードに直接アクセスできることになります。これは基本的には受け入れられません。(保護するリソースごとに全員が異なるパスワードを使用したとしても、それほど悪くはありませんが、多くの人は使用していません。)

于 2013-02-15T13:13:28.090 に答える
4

パスワードがハッシュされ、暗号化されないように構成されている場合、これを行うことはできません。暗号化されたパスワードを使用するようにメンバーシップ プロバイダーを構成する場合は、GetPasswordでうまくいくはずです。パスワード形式を参照してください

そうは言っても、スキート氏の答えに反対することはできません。可能であれば、一方向のハッシュ化されたパスワードを使用する必要があります。

パスワードを忘れた場合の対処法については、ResetPasswordを参照してください。

于 2013-02-15T13:14:59.163 に答える
3

ドキュメントMembershipUser.GetPassword ()はそれをすべて言います:

EnablePasswordRetrieval が false の場合、メンバーシップ プロバイダーは例外を返します。プロバイダーが PasswordFormat が Hashed のパスワードをサポートしている場合、メンバーシップ ユーザーのパスワードを取得することはできません。ユーザーがパスワードを忘れた場合は、ResetPassword メソッドを使用することを検討する必要があります。

パスワードを読み取る他の方法は考えられません。

于 2013-02-15T13:21:02.100 に答える