ホームページ >バックエンド開発 >PHPチュートリアル >クイックヒント:PHPでパスワードをハッシュする方法
PHPパスワードのハッシュ
の詳細な説明とベストプラクティスプログラミング言語では、パスワードをハッシュする方法を理解することが重要です。この記事では、PHPでパスワードハッシュを実装する方法をすばやく説明し、その重要性を説明します。
すべてのPHPプログラマーは、ユーザーログインに依存するアプリケーションを作成して、ある段階で適切に実行します。通常、ユーザー名とパスワードはデータベースに保存され、認証に使用されます。私たち全員が知っているように、パスワードはプレーンテキストのデータベースに決して保存する必要はありません。データベースが損なわれている場合、すべてのパスワードは悪意のある攻撃者によって悪用されます。これが、パスワードをハッシュする方法を学ぶ必要がある理由です。
「暗号化」の代わりに「ハッシュ」という単語を使用していることに注意してください。これは、ハッシュと暗号化が完全に異なる2つのプロセスであり、しばしば混乱するためです。
ハッシュ関数は文字列(myPassword123など)を取り、ハッシュ値と呼ばれる暗号化されたバージョンの文字列に変換します。たとえば、MyPassWord123のハッシュは、9C87BAA223F464954940F859BCF2E233などの一見乱数と文字列である可能性があります。ハッシュは一方向関数です。何かができたら、固定された長さの文字列を取得します。これは、逆にするのが難しいプロセスです。
2つのハッシュ値を比較して、両方が同じ元の文字列から来ているかどうかを確認できます。この記事の後半では、PHPを使用してこのプロセスを実装する方法を確認します。
ハッシュと同様に、暗号化は入力文字列を取り、一見乱数とアルファベットの文字列に変換します。ただし、暗号化は、暗号化キーを知っている場合、可逆プロセスです。これは可逆プロセスであるため、パスワードには適していませんが、ポイントツーポイントセキュアなメッセージングなどの側面に最適です。
ハッシュの代わりにパスワードを暗号化し、使用しているデータベースに悪意のあるサードパーティが何らかの方法でアクセスすると、すべてのユーザーアカウントが脅かされます。これは明らかに良いシナリオではありません。
ハッシュする前にパスワードも「塩漬け」する必要があります。 「塩」は、ハッシュする前にパスワードにランダムな文字列を追加する操作です。
パスワードに塩を追加することにより、辞書攻撃を防ぐことができます(攻撃者はパスワードとして辞書の各単語を体系的に入力します)、レインボーテーブル攻撃(攻撃者は一般的なパスワードハッシュのリストを使用します)。
塩を追加することに加えて、ハッシュ時に比較的安全なアルゴリズムも使用する必要があります。これは、まだ割れていないアルゴリズムであり、できれば一般的なアルゴリズム(SHA512など)ではなく特殊なアルゴリズムであることを意味します。
2023年の時点で、推奨されるハッシュアルゴリズムは
です関数が導入されて以来、PHPでのハッシュ処理は非常に簡単になっています。 password_hash()
現在、デフォルトでBCRyptを使用し、Argon2などの他のハッシュアルゴリズムをサポートしています。また、password_hash()
関数は、パスワードに塩を自動的に追加します。
終了、ハッシュされたパスワードを返します。 「コスト」と「塩」はハッシュの一部として返されます。
簡単に言えば、パスワードのコストは、ハッシュを生成するために必要な計算量を指します。ハッシュを作成する「難易度」を測定するようなものです。コストが高いほど、難易度が高くなります。
ケーキを作りたいと想像してみてください。そのケーキのレシピには「卵を5分間倒す」と書かれています。それがそのケーキを作る「コスト」です。ケーキをより「安全」にしたい場合は、レシピを変更して「卵を10分間倒す」ことができます。ケーキを作るのに時間がかかります。これは、ケーキを作る「コスト」を追加するようなものです。
ドキュメントで読むように:password_hash()
…ハッシュを確認するために必要なすべての情報が含まれています。これにより、関数は、塩またはアルゴリズム情報を個別に保存する必要なく、ハッシュを検証できます。
これにより、ハッシュ値を確認するために他の情報をデータベースに保存する必要がないことが保証されます。password_verify()
実際には、次のように見えます:
<code class="language-php"><?php $password = "sitepoint"; $hashed_password = password_hash($password, PASSWORD_DEFAULT); if (password_verify($password, $hashed_password)) { //如果输入的密码与哈希密码匹配,则登录成功 } else { //重定向到主页 }</code>関数の詳細については、こちらをご覧ください。
関数の情報については、こちらをご覧ください。 password_hash()
password_verify()
結論
トム・バトラーがPHP&mysqlで言ったように:忍者への初心者:password_hash()
幸いなことに、PHPには非常に安全なパスワードハッシュメソッドが含まれています。これらの側面をあなたや私よりもよく知っている人々によって作成され、発生する可能性のあるセキュリティの問題を完全に理解する必要がある私たちのような開発者を避けています。したがって、独自のPHPアルゴリズムを使用してパスワードをハッシュすることを強くお勧めします。
PHPパスワードハッシュこれを念頭に置いて、最新の推奨ハッシュアルゴリズムを最新の状態に保ち、アプリケーションの最良のセキュリティを確保してください。
に関するよくある質問
パスワードのハッシュとは何ですか?なぜPHPで重要なのですか?パスワードハッシュは、平文パスワードを固定長の不可逆的な文字列に変換するプロセスです。 PHPでは、ユーザーパスワードをハッシュフォームに保存することでユーザーのパスワードを保護できるため、攻撃者が元のパスワードを取得することが難しくなります。および
PHPでパスワードをハッシュする方法は? password_hash()
関数を使用してパスワードをハッシュできます。たとえば、password_hash($password, PASSWORD_BCRYPT)
。
PHPでハッシュパスワードを確認する方法は?ハッシュパスワードを検証するには、password_verify()
関数を使用します。指定されたパスワードがデータベースに保存されているハッシュバージョンと一致するかどうかを確認します。
PHPでハッシュするとき、パスワードに塩を追加する必要がありますか?はい、ハッシュする前に各パスワードに一意の塩を使用することをお勧めします。 password_hash()
関数は自動的に塩を生成するため、手動で管理する必要はありません。
以上がクイックヒント:PHPでパスワードをハッシュする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。