検索

ホームページ  >  に質問  >  本文

PHPのpassword_hash関数を使用してパスワードのハッシュ化と検証を行う方法

<p>最近、インターネットで見つけたログイン スクリプトに独自のセキュリティを実装しようとしています。ユーザーごとにソルトを生成する方法を学ぼうとしていたときに、<code>password_hash</code> を見つけました。 </p> <p>(このページを読んで)私が理解した限りでは、<code>password_hash</code> を使用すると、その行にソルトがすでに生成されています。これは本当ですか? </p> <p>別の質問がありますが、塩を 2 つ使用するのは賢明でしょうか? 1 つはファイルに直接、もう 1 つはデータベースにありますか?こうすることで、誰かがデータベース内のソルトを解読しても、そのソルトはファイル内に残ります。塩を保管するのは決して賢明な考えではないとここで読んだことがありますが、人々がこれを何を意味するのかについて私はいつも混乱しています。 </p>
P粉538462187P粉538462187505日前622

全員に返信(2)返信します

  • P粉393030917

    P粉3930309172023-08-22 17:48:16

    はい、正しく理解できました。関数password_hash()は自動的にソルトを生成し、生成されたハッシュ値にソルトを含めます。ソルトをデータベースに保存することは完全に正しく、それがわかっている場合でも機能します。

    リーリー

    あなたが言及した 2 番目のソルト (ファイルに保存されているもの) は、実際には「ペッパー」またはサーバー側キーです。ハッシュ(塩など)の前に追加すると、一種のコショウを追加することになります。ただし、より良い方法があります。最初にハッシュを計算し、次にサーバー側のキーを使用してハッシュを暗号化 (双方向暗号化) することができます。このようにして、必要に応じてキーを変更できます。

    ソルトとは異なり、このキーは秘密にしておく必要があります。混乱してソルトを隠そうとする人がよくいますが、ソルトに任せて、キーを使って秘密を追加する方が良いでしょう。

    返事
    0
  • P粉696146205

    P粉6961462052023-08-22 00:14:55

    パスワードを保存するには、password_hash を使用することをお勧めします。これらをデータベースとファイルに別々に保存しないでください。

    次の入力があるとします:

    リーリー

    まず次の方法でパスワードをハッシュします:

    リーリー

    次に出力を確認します:

    リーリー

    ハッシュ化されていることがわかります (これらの手順は完了していると思います)。

    次に、このハッシュされたパスワードをデータベースに保存します。 パスワード列がハッシュ値を収容できる十分な大きさであることを確認してください (少なくとも 60 文字以上) 。ユーザーがログインを要求した場合、データベース内のハッシュが入力されたパスワードと一致するかどうかを次のように確認できます。 リーリー

    公式リファレンス

    返事
    0
  • キャンセル返事