2011-07-11 8 views
1

私のプログラムにユーザーのパスワードを保存しようとしていますが、プレーンテキストで保存したくありません。したがって、私はそれをハッシュして代わりに保存しています。ユーザーがプログラムの開始時にパスワードを入力する必要がある場合(不正なユーザーから保護するため)、入力されたパスワードをハッシュして2つのハッシュを比較しています。SHA1ハッシュアルゴリズムの問​​題

しかし、次のコードは、入力されたほぼすべてのパスワードに対して同じハッシュを生成しています。誰かが私に次のコードを修正する方法を教えたり、より良いハッシュ関数に向けることができますか?

public static string getSHA1(string userPassword) 
{ 
    return BitConverter.ToString(SHA1Managed.Create().ComputeHash(Encoding.Default.GetBytes(userPassword))).Replace("-", ""); 
} 

ありがとうございます。

+1

などの使用somehting。 – SLaks

+0

@SLaks:いくつかのコードを提供しますか?私は暗号化ゲームには非常に新しいので、私が得ることができるすべての助けが必要です。あなたが望むなら、私はそれを喜んで答えとして受け入れます!もしそうでなければ、頭のスタートに感謝します。 – CODe

+0

http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx – geofftnz

答えて

0

私はあなたの機能を新しいプロジェクトに差し込みました。それは問題なく動作していたようですので、そのパスワードがどのように機能に供給されているか確認してください。明示的なコードの代わりにEncoding.Defaultを使用することには注意が必要です。システムに依存していると言われています。

public static string getSHA1(string userPassword) 
    { 
     return Convert.ToBase64String(new SHA1Managed().ComputeHash(Encoding.Unicode.GetBytes(userPassword))); 
    } 

注:

ここで私が作った1だパスワード保存をやって、コメントで指摘したように/このように一致することは悪いです:あなたは、高速ハッシュアルゴリズムを使用している

  • 。あなたはbrute-force攻撃を緩和するためにパスワードのハッシュを遅くしたいと思っています。 Bcryptこれは良い仕事です。
  • あなたはハッシュをソルトしていません。 Saltingとは、ハッシングに先立っていくつかのランダムなデータをパスワードに追加し、そのハッシュと一緒にランダムなデータを保存することを意味します。これにより、虹のテーブル(巨大なハッシュからパスワードへのマップ)が役に立たなくなります。
+0

情報ありがとうございました。私がしているすべてのハッシュのために私は単一の塩を使うべきですか? – CODe

+0

いいえ、塩は各ユーザーごとに異なる必要があります。その目的は、攻撃者にすべてのユーザーを並行して実行させる代わりに、各ユーザーのパスワードを別々に強制的に強制することです。 – geofftnz

+0

私は見るので、各ユーザーごとに、すべてのハッシングに単一のソルト値を使用できますが、各ソルトは各ユーザーごとに異なる必要があります。再度、感謝します! – CODe

1

あなたは塩漬けSHA512ハッシュ、または、好ましくは、bcryptのを使用する必要があります。この

private static string GetSHA1(string text) 
    { 
     UnicodeEncoding UE = new UnicodeEncoding(); 
     byte[] hashValue; 
     byte[] message = UE.GetBytes(text); 

     SHA1Managed hashString = new SHA1Managed(); 
     string hex = ""; 

     hashValue = hashString.ComputeHash(message); 
     foreach (byte x in hashValue) 
     { 
      hex += String.Format("{0:x2}", x); 
     } 
     return hex; 
    } 
関連する問題