2011-02-08 7 views
2

David Hayden氏のブログ(http://davidhayden.com/blog/dave/archive/2004/02/16/157)に公開されているアプローチです。 aspx)を使用してsaltを作成し、ユーザーのパスワードと生成されたsaltを取得し、SHA1を使用して値をハッシュしてユーザーのパスワードをハッシュします。ASP.NET:複数のサーバーでSHA1 + Saltパスワードをハッシュする

次に、saltとハッシュされたパスワードをデータベースに保存します。

ウェブサイトは現在負荷分散されているので、結果のハッシュ値が両方のサーバーで同じになるかどうかは分かりませんでした。ここで

はデビッド・ヘイデン氏のブログに掲載されたコードの抜粋です:

private static string CreateSalt(int size) 
    { 
    //Generate a cryptographic random number. 
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); 
    byte[] buff = new byte[size]; 
    rng.GetBytes(buff); 

    // Return a Base64 string representation of the random number. 
    return Convert.ToBase64String(buff); 
    } 

private static string CreatePasswordHash(string pwd, string salt) 
    { 
    string saltAndPwd = String.Concat(pwd, salt); 
    string hashedPwd = 
    FormsAuthentication.HashPasswordForStoringInConfigFile(
    saltAndPwd, "sha1"); 

    return hashedPwd; 
    } 

私が尋ねる理由は、このコードは、コードスニペットを使用していることである:

FormsAuthentication.HashPasswordForStoringInConfigFile(
     saltAndPwd, "sha1"); 
+0

塩をASCII文字に制限しないでください。 – SLaks

+1

私は 'Rfc2898DeriveBytes'をユーザーごととアプリケーションごとに塩が好きです。 – CodesInChaos

+0

@コード:ASCII文字はレインボーテーブルで見つかる可能性が高くなります。 – SLaks

答えて

3

私は重要な問題あなたの提示を考えますここでは、SHA1アルゴリズムが実行されているサーバと同じである場合です。この場合、答えは「はい」です。

おそらく、生成された塩は、すべてのサーバーがパスワードハッシュと共にアクセスできる場所に保存されますか?したがって、塩を生成するために使用されるメソッドは、サーバー間で一貫している必要はありません。

1

このメソッドは、渡されたパラメータのみを使用します。
心配する必要はありません。それが動作します。

0

"この問題を解決するには、validationKeyとdecryptionKeyの値がWebファーム内のすべてのコンピュータで同一である必要があります。 http://msdn.microsoft.com/en-us/library/ff647070.aspx#pagexplained0002_webfarmscenarios

+1

それは別の問題です。 – SLaks

+0

はい異なる問題です。同じアルゴリズムを使用しているため、ハッシュはすべてのサーバーで同じですが、キーとは何も関係ありません。 –

+0

ありがとうございます!それは当初の懸念でしたが、問題ではないことを知ってうれしかったです。 – Abe