現在の位置: ホーム> 最新記事一覧> password_verifyと暗号化アルゴリズムのPassword_hashが使用することの関係は何ですか?

password_verifyと暗号化アルゴリズムのPassword_hashが使用することの関係は何ですか?

gitbox 2025-09-29

PHPでは、 password_hash()およびpassword_verify()は、パスワード暗号化と検証の関数です。それらの組み合わせは、パスワードストレージのセキュリティを効果的に改善し、パスワードの漏れと割れを防ぐことができます。ただし、多くの開発者は、使用する暗号化アルゴリズムとその関係についてまだ質問をしています。この記事では、暗号化アルゴリズムとそれらの間の関係について説明します。

1。パスワードの暗号化アルゴリズム()

Password_hash()関数はPHP 5.5以上で導入され、ユーザーのPlantextパスワードを暗号化されたパスワードに変換するために使用されます。最新のハッシュアルゴリズム( BCRYPTなど)を使用し、「塩」を自動的に生成することができます。塩は、暗号化されるたびに同じプレーンテキストパスワードが異なるハッシュ値を生成することを保証するために使用される追加のランダムデータです。

デフォルトでは、 password_hash()bcryptアルゴリズムを使用し、生成するハッシュ値に塩の内容が含まれるため、パスワードを保存するときに追加の塩は必要ありません。 BCRYPTアルゴリズム自体も適応可能です。つまり、ブルートフォースの亀裂に抵抗するためにコスト係数を増やすことにより、コンピューティング強度を高めることができます。

サンプルコード:

 <span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">'my_secure_password'</span></span><span>;
</span><span><span class="hljs-variable">$hashedPassword</span></span><span> = </span><span><span class="hljs-title function_ invoke__">password_hash</span></span><span>(</span><span><span class="hljs-variable">$password</span></span><span>, PASSWORD_BCRYPT);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$hashedPassword</span></span><span>;
</span></span>

2。password_verify ()の役割

password_verify()関数は、入力されたパスワードが保存されたハッシュ値と一致することを確認するために使用されます。その機能は、ユーザーがログインするときにデータベースに保存された暗号化されたパスワードを使用してユーザーが入力したプレーンテキストパスワードを比較することです。Pashaud_verify ()は、保存されたハッシュ値で塩を自動的に抽出し、同じアルゴリズムを使用してユーザーが入力したパスワードを暗号化し、保存されたハッシュ値と比較します。

Password_verify()は、ハッシュ値で指定されたアルゴリズムに基づいて計算されることに注意してください。したがって、開発者は、 Password_verify()の塩または暗号化アルゴリズムを手動で渡す必要はありません。これは、着信ハッシュ値に基づいて適切な方法を自動的に選択します。

サンプルコード:

 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">password_verify</span></span><span>(</span><span><span class="hljs-variable">$userInputPassword</span></span><span>, </span><span><span class="hljs-variable">$storedHash</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Password is correct!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Invalid password!"</span></span><span>;
}
</span></span>

3。パスワード_hash()password_verify()の暗号化アルゴリズム関係

password_hash()password_verify()の密接な関係は、パスワードの処理と検証に同じ暗号化アルゴリズムを使用することです。具体的には:

  • パスワード暗号化: password_hash()は、指定されたアルゴリズム(デフォルトではBCRYPT )に従って、プレーンテキストパスワードを暗号化されたハッシュ値に変換します。ハッシュ値には、アルゴリズムの塩とその他のパラメーター(作業要因など)が含まれています。

  • パスワード検証: password_verify()は、同じアルゴリズム( bcryptなど)を使用して、ハッシュ値でアルゴリズム情報と塩を読み取り、保存されたハッシュ値と比較することにより、ユーザーが入力したパスワードを暗号化します。

したがって、 password_verify()は、まったく同じアルゴリズムとパラメーターをpassword_hash()と使用して検証する必要があります。ハッシュ値がbcryptを使用する場合、 password_verify()も検証にbcryptを自動的に使用します。

4。暗号化アルゴリズムのスケーラビリティ

password_hash()bcryptにデフォルトですが、他のアルゴリズムもサポートしています。 PHP 7.2の後、 password_hash()は、より強力な2つのアルゴリズム、 Argon2iArgon2IDもサポートしています。 Argon2は、 bcryptよりもGPUのパワー亀裂を防ぐ能力を向上させる最新のハッシュアルゴリズムです。

Argon2iを使用した例コード:

 <span><span><span class="hljs-variable">$hashedPassword</span></span><span> = </span><span><span class="hljs-title function_ invoke__">password_hash</span></span><span>(</span><span><span class="hljs-variable">$password</span></span><span>, PASSWORD_ARGON2I);
</span></span>

Argon2アルゴリズムを使用してパスワードが暗号化されている場合、 Password_verify()は、検証のために対応するアルゴリズムを自動的に識別して使用します。

5。概要

password_hash()およびpassword_verify()は、パスワードの暗号化と検証のためのPHPの2つの非常に重要な関数です。それらの暗号化アルゴリズムは密接に関連しており、 password_hash()はハッシュ値を暗号化および生成するために使用され、 password_verify()はハッシュ値に基づいてパスワードの正確性を確認するために使用されます。どちらも一緒に使用され、パスワードストレージのセキュリティを確保します。 BCRYPTアルゴリズムはデフォルトで使用されますが、PHPは、必要に応じて選択できるArgon2などのより強力なアルゴリズムもサポートしています。

Password_hash()およびpassword_verify()で使用される暗号化アルゴリズム関係を理解することにより、開発者は安全なパスワードストレージと検証メカニズムをより適切に設計して、アプリケーションセキュリティを改善できます。