2010-12-04 15 views
4

私は自分のアプリに「ログイン」しようとしていて、自分のデータベースに入力するユーザーのパスワードを暗号化する最良の方法はなんですか?私はGoogleで多くの方法を見つけましたが、どれがベストであるか分かりません。パスワードを暗号化する

+0

あなたが「暗号化」、パスワードや「ハッシュ」のパスワードが必要ですか?これは同じではありません。 Hashedはより安全ですが、いつか読めるようにする必要がある場合は、Encryptedを使用してください。以下のほとんどの答えは、ハッシュが必要だと仮定しています。あなたは明らかにすることができます:)? –

+0

私はハッシュが欲しいです。より安全です:) – Alex

答えて

8

私は片道で行くだろうsalted hash

たとえば、SHA1ハッシュを使用すると、パスワードを元のパスワードに戻すことができないハッシュとして保存する方法があります。ユーザーがパスワードを入力すると、パスワードに同じSHA1ハッシュを実行し、DBに格納されているものとそのハッシュを比較します。一致した場合は、パスワードが正しいことになります。

ハッシュをさらに安全にするには、塩を追加することができます。これは基本的にランダムに生成された値で、ユーザーごとに生成し、アカウントを作成してユーザーレコードに保存します。パスワードのハッシュを作成するときは、最初にパスワードと塩を結合し、この結合された値をハッシュします。ユーザーを認証するには、入力されたパスワードとユーザー用に保存されたsaltを結合し、結合された値に対してハッシュを実行して比較します。

塩をミックスに追加することで、塩分の部分が異なるため、同じになる可能性のあるパスワードのハッシュが異なるハッシュになるようにします。したがって、2人のユーザーが同じパスワード「Password1234」を持っている場合、2つのユーザーの格納されたハッシュは同じではないため、2人のユーザーが同じパスワードを持つことは確認できません。

の.NET Frameworkが提供する
+0

+1、SHA1の使用はお勧めしません。私はブローフィッシュ/二枚貝またはSHA-2をお勧めします。参照:http://stackoverflow.com/questions/1561174/sha512-vs-blowfish-and-bcrypt – Falcon

+0

財布SHA1/SHA2は高速であり、ブルートフォースの影響をより受けやすいので最適ではありません。だから良いKDFを使う方が良いです。 – CodesInChaos

+1

これはhttp://www.obviex.com/samples/EncryptionWithSalt.aspxで開始するのに最適な場所です – Tom

-1

使用暗号アルゴリズム

は通常、多くのアプリケーションは

See here

+2

鍵のサイズやスピードを絶対に必要としない限り、新しいアプリケーションでMD5を使用する理由はまったくありません。 –

+0

後方互換性を除いてMD5を使用する理由はありません。新しいコードでは、SHA-1またはSHA-2 – CodesInChaos

+0

SHA-2が好きです。 .NET Frameworkは、['System.Security.Cryptography'](http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx)名前空間で組み込み関数としてSHA256およびSHA512を提供します。 –

3

MD5のalgorithemを使用して、私はそれは良い標準化されたキー導出-機能を使用していますRfc2898DeriveBytes

を使用することをお勧めします、そして現代のハッシュ。レインボーテーブルを防ぐために、パスワードに加えて塩を渡す必要があります。そして、それはあなたのために塩とパスワードを混ぜるので、自分でそれをする方法を理解する必要はありません。

+1

RFC2898はPBKDF2としても知られています。 – caf

1

bcryptを使用してください。いいえ、実際には、独自の方法を構築するためのアイデアを一切削除してください。use bcrypt世界にはすでに自宅で安全でないパスワードハッシングスキームがあります。

もちろん、ユーザーごとの塩を使って塩漬けされたパスワードハッシュを保存すると、すべてうまくできています。しかし、塩漬けは虹のテーブル攻撃を防ぐだけであり、暴力を防ぐことはできません。したがって、逆説的に、パスワードハッシュを生成または検証するための高速な方法を使用する必要はありません。 MD5、SHA、何でも - 彼らはすべて高速です。私の後でやり直してください:bcryptを使ってください。

+0

BcryptとPBKDF2(別名RFC2898)はどちらもきれいなKDFです。しかし、実際のKDFを使用してください! – caf