2011-07-21 1 views
1

MVC 3 Crypto Helper - これにより、パスワードをより安全にするために余分なシールドが追加されますか?

string salt = Crypto.GenerateSalt(); 
string saltAndPwd = String.Concat(originalPassword, salt); 
string hashedPwd = Crypto.HashPassword(saltAndPwd); 

B

string hashedPwd = Crypto.HashPassword(originalPassword); 

私はより安全である、方法AおよびB法を知ってもいいですか?それとも正しいアプローチですか?塩を使用しての主な目的は虹のテーブルを倒しているとして、

public static string HashPassword(string password) 
{ 
if (password == null) 
{ 
    throw new ArgumentNullException("password"); 
    } 
    return HashWithSalt(password, GenerateSaltInternal(0x10)); 
} 

答えて

3

HashPasswordはすでにそれのようには思えないんものに追加の塩を加える:リフレクターと、私は、これはコア内のハッシュパスワード方式であるました追加のオーバーヘッドしか発生しません(自分で生成した塩を保存する必要があるため、HashPasswordは戻り値にそれを組み込みます)。参考までに、これはHashPasswordが何をするかです:

パスワードハッシュは128ビットの塩、256ビットのサブキー、1000回の反復を使用して、RFC 2898アルゴリズムで生成されます。生成されたハッシュ・バイトストリームのフォーマットは、{0x00、salt、subkey}です。これは、返される前にベース64でエンコードされています。

したがって、要するに、フレームワークにはすでに十分な妥当な定義があります。

+0

ハッシュパスワードメソッドを使用している場合は、saltを保存する必要はなく、crypto.hashpasswordの行をコールバックするときに同じ値が生成されますか? (私が意味するのは、ユーザーログイン時に同じ値の比較を取得することです... – 1myb

+0

投稿したMSDNのセクションを見ると、返された値に塩が格納されます。したがって、保存する必要があるのは、あなたが 'Crypto.VerifyHashedPassword'を呼び出すと残りの部分が実行されます。 –

+0

最後に、自己実装の後、私は理解しています... verifyhashedpasswordは元のパスワードかどうかを検出するために使用されます。 = Dちょうどハッシュされたパスワードを保持する。ログインフォームで、verifyhashedpassword(データベースのハッシュパスワード、ユーザログイン入力)を使用する。もし真なら...パスワード= D – 1myb

関連する問題