PHPのpassword_hash関数を使用してパスワードのハッシュ化と検証を行う方法
P粉538462187
2023-08-21 18:37:28
<p>最近、インターネットで見つけたログイン スクリプトに独自のセキュリティを実装しようとしています。ユーザーごとにソルトを生成する方法を学ぼうとしていたときに、<code>password_hash</code> を見つけました。 </p>
<p>(このページを読んで)私が理解した限りでは、<code>password_hash</code> を使用すると、その行にソルトがすでに生成されています。これは本当ですか? </p>
<p>別の質問がありますが、塩を 2 つ使用するのは賢明でしょうか? 1 つはファイルに直接、もう 1 つはデータベースにありますか?こうすることで、誰かがデータベース内のソルトを解読しても、そのソルトはファイル内に残ります。塩を保管するのは決して賢明な考えではないとここで読んだことがありますが、人々がこれを何を意味するのかについて私はいつも混乱しています。 </p>
はい、正しく理解できました。関数password_hash()は自動的にソルトを生成し、生成されたハッシュ値にソルトを含めます。ソルトをデータベースに保存することは完全に正しく、それがわかっている場合でも機能します。
リーリーあなたが言及した 2 番目のソルト (ファイルに保存されているもの) は、実際には「ペッパー」またはサーバー側キーです。ハッシュ(塩など)の前に追加すると、一種のコショウを追加することになります。ただし、より良い方法があります。最初にハッシュを計算し、次にサーバー側のキーを使用してハッシュを暗号化 (双方向暗号化) することができます。このようにして、必要に応じてキーを変更できます。
ソルトとは異なり、このキーは秘密にしておく必要があります。混乱してソルトを隠そうとする人がよくいますが、ソルトに任せて、キーを使って秘密を追加する方が良いでしょう。
パスワードを保存するには、
password_hash
を使用することをお勧めします。これらをデータベースとファイルに別々に保存しないでください。次の入力があるとします:
リーリーまず次の方法でパスワードをハッシュします:
リーリー次に出力を確認します:
リーリーハッシュ化されていることがわかります (これらの手順は完了していると思います)。
次に、このハッシュされたパスワードをデータベースに保存します。 パスワード列がハッシュ値を収容できる十分な大きさであることを確認してください (少なくとも 60 文字以上) 。ユーザーがログインを要求した場合、データベース内のハッシュが入力されたパスワードと一致するかどうかを次のように確認できます。 リーリー
公式リファレンス