17

重複の可能性:
PHPパスワードの安全なハッシュとソルト

ユーザーのクレデンシャル(電子メール、ユーザー名、パスワード)をMySQLデータベースに保存するシステムを作成していますが、暗号化、ソルティング、および暗号化タイプの使用に関して矛盾する見解が見られます。

あなたがお勧めする最良の方法は何ですか?MD5またはSHA1でエンコードしますか?塩漬けか塩漬けしないか?パスワードだけを暗号化するのか、それとも3つの要素すべてを暗号化するのか?

4

5 に答える 5

12

パスワードハッシュには、NIST承認済みPBKDF2を使用してください。パスワードごとにランダムな非シークレットソルトを使用し、反復回数を簡単に(1000以上)使用する必要があります。

ユーザー名と電子メールについては、おそらく暗号化する価値はありません。

于 2012-05-01T13:00:20.793 に答える
7

IMOのベストプラクティスは次のとおりです。

  • SHA256やSHA512などのハッシュアルゴリズムを使用します。ハッシュを元に戻したり、レインボー攻撃を実行したりできるため、MD5は安全ではなくなりました。

  • 強力なソルトを使用して、攻撃者がデータベースへのエントリを取得した場合に、一般的にハッシュされたパスワードを推測できないようにします。

  • 暗号化は使用しないでください。

  • パスワード、ユーザー名、および電子メールのみをハッシュして、プレーンテキストとして問題ありません。

于 2012-05-01T12:11:23.930 に答える
3

暗号化する必要があるのは、実際にはパスワードだけです。現実的には、少なくともSHA-256のアルゴリズム(MD5とSHA1はクラック可能だと確信していますか?)Hashingパスワードの両方が非常に安全である必要があります(エンコードと言うときはそういう意味です) 。 Salting

それらを保存するための好ましい方法に関する答えは次のとおりです。データベースにパスワードを保存するための好ましい方法

于 2012-05-01T12:00:55.423 に答える
2

ユーザー名と電子メールは暗号化しないでください。プレーンテキストである必要があります。そうすれば、より便利になります。

パスワードに関しては、絶対に暗号化またはハッシュ化する必要があります。できればソルトも使用する必要があります。これまで、私はこれを行うためにやや興味深い手法を使用していました。AES、そのキーはパスワード自体です。したがって、ユーザーが自分のパスワードを「blabla123」にすると、を呼び出してMySQLに保存しますAES_ENCRYPT('blabla123', 'blabla123')。これには2つの利点があります。

  • 暗号化キーはどこにも保存しません
  • 各パスワードは、異なるキーを使用して暗号化されます。したがって、キーを見つけたとしても、その有用性には限界があります。

有効性は、ユーザーが入力した内容を暗号化し、2つの値を比較することによって行われます。

于 2012-05-01T12:05:18.707 に答える
1

レインボーテーブルを使用した攻撃を防ぐために、パスワードは強力なソルト(MD5またはSHA1のいずれかで問題ありません)でハッシュすることによって保護する必要があります。

メールアドレスをハッシュしないでください。ハッシュするとすぐに、ユーザーが入力した内容を確認する以外の目的で使用できなくなるため、ハッシュ化するとその人にメールを送信できなくなります。同様に、ユーザー名は、その人を識別できるようにプレーンテキストで保存するのが最適です。

于 2012-05-01T11:58:38.530 に答える