ホームページ >バックエンド開発 >PHPチュートリアル >クイックヒント:PHPでパスワードをハッシュする方法

クイックヒント:PHPでパスワードをハッシュする方法

Lisa Kudrow
Lisa Kudrowオリジナル
2025-02-08 12:03:10710ブラウズ

Quick Tip: How to Hash a Password in PHP

PHPパスワードのハッシュ

の詳細な説明とベストプラクティス

プログラミング言語では、パスワードをハッシュする方法を理解することが重要です。この記事では、PHPでパスワードハッシュを実装する方法をすばやく説明し、その重要性を説明します。

すべてのPHPプログラマーは、ユーザーログインに依存するアプリケーションを作成して、ある段階で適切に実行します。通常、ユーザー名とパスワードはデータベースに保存され、認証に使用されます。私たち全員が知っているように、パスワードはプレーンテキストのデータベースに決して保存する必要はありません。データベースが損なわれている場合、すべてのパスワードは悪意のある攻撃者によって悪用されます。これが、パスワードをハッシュする方法を学ぶ必要がある理由です。

「暗号化」の代わりに「ハッシュ」という単語を使用していることに注意してください。これは、ハッシュと暗号化が完全に異なる2つのプロセスであり、しばしば混乱するためです。

hash

ハッシュ関数は文字列(myPassword123など)を取り、ハッシュ値と呼ばれる暗号化されたバージョンの文字列に変換します。たとえば、MyPassWord123のハッシュは、9C87BAA223F464954940F859BCF2E233などの一見乱数と文字列である可能性があります。ハッシュは一方向関数です。何かができたら、固定された長さの文字列を取得します。これは、逆にするのが難しいプロセスです。

2つのハッシュ値を比較して、両方が同じ元の文字列から来ているかどうかを確認できます。この記事の後半では、PHPを使用してこのプロセスを実装する方法を確認します。

encryption

ハッシュと同様に、暗号化は入力文字列を取り、一見乱数とアルファベットの文字列に変換します。ただし、暗号化は、暗号化キーを知っている場合、可逆プロセスです。これは可逆プロセスであるため、パスワードには適していませんが、ポイントツーポイントセキュアなメッセージングなどの側面に最適です。

ハッシュの代わりにパスワードを暗号化し、使用しているデータベースに悪意のあるサードパーティが何らかの方法でアクセスすると、すべてのユーザーアカウントが脅かされます。これは明らかに良いシナリオではありません。

塩を追加

ハッシュする前にパスワードも「塩漬け」する必要があります。 「塩」は、ハッシュする前にパスワードにランダムな文字列を追加する操作です。

パスワードに塩を追加することにより、辞書攻撃を防ぐことができます(攻撃者はパスワードとして辞書の各単語を体系的に入力します)、レインボーテーブル攻撃(攻撃者は一般的なパスワードハッシュのリストを使用します)。

塩を追加することに加えて、ハッシュ時に比較的安全なアルゴリズムも使用する必要があります。これは、まだ割れていないアルゴリズムであり、できれば一般的なアルゴリズム(SHA512など)ではなく特殊なアルゴリズムであることを意味します。

2023年の時点で、推奨されるハッシュアルゴリズムは

です
  • argon2
  • scrypt
  • bcrypt
  • pbkdf2

php

でのハッシュ処理 PHP 5.5に

関数が導入されて以来、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プログラマーの場合、ハッシュと暗号化の違いを理解し、ハッシュを使用してパスワードを保存してユーザーアカウントを攻撃から保護することが重要です。 PHP 5.5で導入された

関数により、プログラマーはArgon2やBcryptを含むさまざまなアルゴリズムを使用してパスワードを安全に使用できます。

トム・バトラーがPHP&mysqlで言ったように:忍者への初心者:password_hash()

幸いなことに、PHPには非常に安全なパスワードハッシュメソッドが含まれています。これらの側面をあなたや私よりもよく知っている人々によって作成され、発生する可能性のあるセキュリティの問題を完全に理解する必要がある私たちのような開発者を避けています。したがって、独自のPHPアルゴリズムを使用してパスワードをハッシュすることを強くお勧めします。

これを念頭に置いて、最新の推奨ハッシュアルゴリズムを最新の状態に保ち、アプリケーションの最良のセキュリティを確保してください。

PHPパスワードハッシュ

に関するよくある質問

パスワードのハッシュとは何ですか?なぜPHPで重要なのですか?パスワードハッシュは、平文パスワードを固定長の不可逆的な文字列に変換するプロセスです。 PHPでは、ユーザーパスワードをハッシュフォームに保存することでユーザーのパスワードを保護できるため、攻撃者が元のパスワードを取得することが難しくなります。

PHPでパスワードをハッシュするには、どのハッシュアルゴリズムを使用する必要がありますか? PHPは

および>関数を提供し、BCRYPTアルゴリズムはデフォルトで使用されます。 Bcryptは、安全なパスワードハッシュオプションであるため、推奨されます。

PHPでパスワードをハッシュする方法は? password_hash()関数を使用してパスワードをハッシュできます。たとえば、password_hash($password, PASSWORD_BCRYPT)

PHPでハッシュパスワードを確認する方法は?ハッシュパスワードを検証するには、password_verify()関数を使用します。指定されたパスワードがデータベースに保存されているハッシュバージョンと一致するかどうかを確認します。

PHPでハッシュするとき、パスワードに塩を追加する必要がありますか?はい、ハッシュする前に各パスワードに一意の塩を使用することをお勧めします。 password_hash()関数は自動的に塩を生成するため、手動で管理する必要はありません。

以上がクイックヒント:PHPでパスワードをハッシュする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。