2011-07-26 7 views
2

にasp.netメンバーシッププロバイダーでハッシュパスワードを変更する方法を私はコードaccrossに来ましたパスワード。 ランダムなパスワードを生成するリセット機能を追加したいと思います。 は、特定のクライアントにuseridとランダムに生成されたパスワードを持つ電子メールを送信します。その後、パスワードを変更することができます。はリセット&MVC

+1

わかりません。これは、ユーザーのパスワードを「パスワード」に設定しています。それはどこにでも入力できる文字列か、サイトの「パスワードを変更する」セクション(おそらく電子メールのリンクから)に入る前にユーザーに電子メールで送られるハードコードされた文字列です。 –

+0

orytだから、 "password"を使う代わりに、次のようなものを使うことができます:string newPassword = Membership.GeneratePassword(8、2); newpassword –

+0

ええと正確に... –

答えて

3

あなたがあなた自身の塩を作成し、新しいパスワードをハッシュする必要がある場合Membership GeneratePassword方法

string password = System.Web.Security.Membership.GeneratePassword(14, 0); 

を使用して、このようなランダムなパスワードを生成することができ、ここで多くの会員コードと同じこと実装です:

public class Cryptographer : ICryptographer 
{ 
    #region ICryptographer Members 

    public string CreateSalt() 
    { 
     byte[] data = new byte[0x10]; 
     new RNGCryptoServiceProvider().GetBytes(data); 
     return Convert.ToBase64String(data); 
    } 

    /// <summary> 
    /// Hash the password against the salt 
    /// </summary> 
    /// <param name="pass">Plain password</param> 
    /// <param name="salt">Salt string</param> 
    /// <returns>Encrypted password</returns> 
    public string HashPassword(string password, string salt) 
    { 
     byte[] bytes = Encoding.Unicode.GetBytes(password); 
     byte[] src = Convert.FromBase64String(salt); 
     byte[] dst = new byte[src.Length + bytes.Length]; 
     byte[] inArray = null; 
     Buffer.BlockCopy(src, 0, dst, 0, src.Length); 
     Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length); 
     HashAlgorithm algorithm = HashAlgorithm.Create(System.Web.Security.Membership.HashAlgorithmType); 
     inArray = algorithm.ComputeHash(dst); 
     return Convert.ToBase64String(inArray); 
    } 

    #endregion 
} 
+0

最初のものは簡潔ではるかに優れていますが、どのようなabtはハッシュパスワードを変更するのですか? –

+0

これは、データベースに直接保存する必要がある場合、または独自のプロバイダを作成する場合に使用します。あなたは、あなたが何をしているかに応じて、これなしでも可能です。 – CRice

+0

yeh私はdbに直接保存しますが、ユーザーはリセット後にパスワードを変更できます。 –

1

ChangePassword方法の第二のparemeterは、あなたがそのユーザーのために使用したい新しいパスワードをreprisents文字列です。

これは、ユーザーに電子メールで送信する自動生成文字列であっても、任意の文字列に変更できます。あなたの新しい質問に答えるために

UPDATE

、私は、パスワードなどのすべてのハッシュは、メンバーシッププロバイダーによって処理されていることを信じています。

単純にユーザーのパスワードをランダムな新しい値にリセットする場合は、ChangePasswordの代わりにResetPasswordメソッドを使用する方がよい場合があります。

この意志:

新しい、自動的に生成されたパスワードとユーザーのパスワードをリセットします。

+0

Yehしかし、ランダムなパスワードは親切ではありません。私が望むのは、パスワード変更機能をユーザーに提供して、パスワードをより読みやすいものに変更できるようにすることです。 –