ホームページ > バックエンド開発 > PHPチュートリアル > PHP 5.5パスワードハッシュAPIでパスワードをハッシュします

PHP 5.5パスワードハッシュAPIでパスワードをハッシュします

Jennifer Aniston
リリース: 2025-02-23 10:19:09
オリジナル
353 人が閲覧しました

Hashing Passwords with the PHP 5.5 Password Hashing API

コアポイント

  • PHP 5.5パスワードハッシュAPIは、パスワードをハッシュする場合は、パスワードをハッシュ値で検証するためのパスワードを単純化します。パスワードをハッシュ値で確認する場合は、パスワードを再度再施行する必要があるかどうかを確認するために、password_hash() >ハッシュアルゴリズムの名前とハッシュプロセスで使用されるさまざまなオプションを返すために使用されます。 password_verify() password_needs_rehash()このAPIは、デフォルトでBCRyptアルゴリズムを使用し、開発者がそれを提供する必要なく塩値の生成を自動的に処理します。ただし、開発者は、3番目のパラメーターをpassword_get_info()関数に渡すことで、独自の塩またはコスト値を提供できます。
  • このAPIは非常に安全であると考えられていますが、包括的なセキュリティポリシーの一部として使用することをお勧めします。 PHP 5.3.7以降を使用する開発者は、PHPバージョンが5.5にアップグレードされた後、APIをエミュレートし、自動的に無効にするpassword_hash()と呼ばれるライブラリを使用できます。
  • BCRYPTの使用は現在、最高のパスワードハッシュプラクティスとして認識されていますが、多くの開発者はまだMD5やSHA1などの古いアルゴリズムと弱いアルゴリズムを使用しています。一部の開発者は、ハッシュするときに塩を使用しません。 PHP 5.5の新しいハッシュAPIは、複雑さを隠しながらBCRyptに注意を向けるように設計されています。この記事では、PHP New Hash APIを使用することの基本について説明します。新しいパスワードハッシュAPIは、4つの単純な関数を公開します:password_compat

- パスワードをハッシュするために使用されます。

  • - ハッシュ値に基づいてパスワードを確認するために使用されます。 password_hash()
  • - パスワードを再ハッシュするときに使用します。 password_verify()
  • - ハッシュアルゴリズムの名前とハッシュプロセスで使用されるさまざまなオプションを返します。 password_needs_rehash()
  • password_get_info()

関数は安全ですが、多くの人はそれが複雑すぎてエラーが発生しやすいと考えています。その後、一部の開発者は、弱い塩と弱いアルゴリズムを使用して、次のようなハッシュを生成します。 password_hash()

ただし、

関数は私たちの作業を簡素化し、コードを安全に保つことができます。ハッシュパスワードが必要な場合は、関数に渡すだけで、データベースに保存できるハッシュ値が返されます。 crypt()

<?php $hash = md5($password . $salt); // 可行,但危险
ログイン後にコピー

それだけです!最初のパラメーターは、パスワード文字列を持つもので、2番目のパラメーターは、ハッシュを生成するために適用されるアルゴリズムを指定します。現在のデフォルトアルゴリズムはBCRYPTですが、将来的にはデフォルトアルゴリズムとしてより強力なアルゴリズムを追加し、大きな文字列を生成する可能性があります。プロジェクトでPASSWORD_DEFAULTを使用している場合は、60文字以上の容量のある列にハッシュを保存してください。列サイズを255に設定するのが良いかもしれません。 2番目のパラメーターとしてPASSWORD_BCRYPTを使用することもできます。この場合、結果は常に60文字の長さです。ここでは、塩の価値やコストパラメーターを提供する必要がないことが重要です。新しいAPIは、これらすべてを処理します。塩はハッシュの一部なので、個別に保存する必要はありません。独自の塩(またはコスト)を提供したい場合は、3番目のパラメーター(オプション配列)を関数に渡すことで実行できます。

<?php $hash = password_hash($password, PASSWORD_DEFAULT);
ログイン後にコピー
この方法では、最新のセキュリティ対策をいつでも使用できます。 PHPが後でより強力なハッシュアルゴリズムを実装することを決定した場合、コードはそれを活用できます。

password_verify()

新しいAPIを使用してハッシュを生成する方法を学んだので、パスワードを確認する方法を見てみましょう。ハッシュをデータベースに保存することを忘れないでください。ただし、ユーザーがログインするときに入手できるのは単純なテキストパスワードです。

関数は、単純なテキストパスワードとハッシュ文字列をその2つのパラメーターとして取得します。ハッシュが指定されたパスワードと一致する場合、trueを返します。 password_verify()

<?php $options = [
    'salt' => custom_function_for_salt(), //编写您自己的代码以生成合适的盐
    'cost' => 12 // 默认成本为 10
];
$hash = password_hash($password, PASSWORD_DEFAULT, $options);
ログイン後にコピー
塩はハッシュパスワードの一部であることを忘れないでください。そのため、ここで個別に指定しないのです。

password_needs_rehash()

ハッシュストリングの塩とコストのパラメーターを変更する必要がある場合はどうすればよいですか?これは、より強い塩またはより大きなコストパラメーターを追加することで安全性を改善することを決定する可能性があるため、これは懸念事項です。さらに、PHPはハッシュアルゴリズムのデフォルトの実装を変更する場合があります。これらすべての場合、既存のパスワードを再ハッシュする必要があります。

password_needs_rehash()

指定されたハッシュが特定のアルゴリズムを実装し、作成時に特定のオプション(コストや塩など)を使用するかどうかを確認するのに役立ちます。

<?php if (password_verify($password, $hash)) {
    // 成功!
} else {
    // 无效的凭据
}
ログイン後にコピー
ユーザーがWebサイトにログインしようとするとき、これを行う必要があることを忘れないでください。

password_get_info()

ハッシュを受け入れ、3つの要素を含む連想配列を返します。 password_get_info()

    - 特定のアルゴリズムを識別する定数
  • algo
  • - 使用されたアルゴリズムの名前
  • algoName
  • - ハッシュを生成するときに使用されるさまざまなオプション
  • options
結論

新しいパスワードハッシュAPIは、crypt()関数を使用するよりも使いやすいです。あなたのウェブサイトが現在PHP 5.5で実行されている場合は、新しいハッシュAPIを使用することを強くお勧めします。 PHP 5.3.7(またはそれ以降)を使用している人は、PHPバージョンが5.5にアップグレードされた後、APIをエミュレートし、自動的に無効にするpassword_compatと呼ばれるライブラリを使用できます。

PHP 5.5パスワードハッシュAPI FAQ(FAQ)PHP 5.5パスワードハッシュAPIとは何ですか?なぜそれが重要なのですか?

PHP 5.5パスワードハッシュAPIは、PHP 5.5以降の機能であり、開発者に安全な方法でパスワードをハッシュして検証する簡単な方法を提供します。機密性の高いユーザーデータを保護するのに役立つため、重要です。データベースがハッキングされている場合、ハッシュパスワードは、単純なテキストパスワードよりもクラックするのが難しいです。 APIは、デフォルトで強力なハッシュ関数Bcryptを使用し、塩値の生成を自動的に処理するため、開発者が安全なパスワード処理を簡単に実装できます。

機能はどのように機能しますか?

password_hash

関数は、PHP 5.5パスワードハッシュAPIの一部です。プレーンテキストパスワードとハッシュアルゴリズムを入力として受信し、ハッシュパスワードを返します。また、この関数は、ハッシュする前にパスワードにランダム塩値を自動的に生成および適用します。この塩値は返されたハッシュに含まれるため、個別に保存する必要はありません。

password_hash

関数の目的は何ですか?

password_verify

関数は、ハッシュパスワードに基づいてパスワードを検証するために使用されます。プレーンテキストパスワードと入力としてハッシュパスワードを受信します。この関数は、ハッシュされたパスワードから塩の値とハッシュアルゴリズムを抽出し、それらをプレーンテキストパスワードに適用し、結果を元のハッシュされたパスワードと比較します。一致する場合、関数はtrueを返し、パスワードが正しいことを示します。

password_verify PHP 5.5パスワードハッシュAPIのセキュリティはどうですか?

PHP 5.5パスワードハッシュAPIは非常に安全であると考えられています。デフォルトでBCRyptハッシュアルゴリズムを使用します。これは、強力なハッシュ機能です。また、APIは各パスワードにランダム塩値を自動的に生成および適用します。これにより、レインボーテーブル攻撃を防ぐのに役立ちます。ただし、すべてのセキュリティ対策と同様に、それは絶対確実ではなく、包括的なセキュリティポリシーの一部として使用する必要があります。

関数でカスタムソルトを使用できますか?

password_hashはい、

関数でカスタムソルトを使用できますが、これは推奨されません。この機能は、各パスワードのランダム塩値を自動的に生成します。これは通常、カスタムソルトよりも安全です。カスタムソルトを使用することを選択した場合、少なくとも22文字のランダムな文字列にする必要があります。

password_hash

関数のコストパラメーターは何ですか?

password_hash

関数のコストパラメーターは、ハッシュの計算コストを決定します。コストが高いほどハッシュがより安全になりますが、計算が遅くなります。デフォルトのコストは10です。これは、ほとんどのアプリケーションのセキュリティとパフォーマンスのバランスが取れています。

ハッシュパスワードを再ハッシュする必要があるかどうかを確認する方法は?

password_needs_rehash機能を使用して、ハッシュパスワードを再ハッシュする必要があるかどうかを確認できます。この関数は、ハッシュパスワード、ハッシュアルゴリズム、およびオプションのコストを入力として受信します。ハッシュパスワードが異なるアルゴリズムまたはコストで作成された場合、それは真実で返され、再ハッシュする必要があることを示します。

PHPのPHP 5.5パスワードHASH APIを使用することはできますか?

PHP 5.5パスワードハッシュAPIは、PHP 5.5以降でのみ使用できます。ただし、PHP 5.3.7以降と同じ機能を提供する互換性ライブラリがあります。

PASSWORD_DEFAULT定数ハッシュを使用してパスワードを持っていると、PHPの将来のバージョンでデフォルトのアルゴリズムが変更された場合はどうなりますか?

PASSWORD_DEFAULT定数を使用してパスワードがあり、PHP変更の将来のバージョンのデフォルトのアルゴリズムを使用している場合、password_hash関数は期待どおりに機能し続けます。ハッシュされたパスワードには、使用されているアルゴリズムに関する情報が含まれているため、password_verify関数はパスワードを正しく検証できます。

PHP 5.5パスワードHASH APIを使用して非ASCIIパスワードを使用できますか?

はい、非ASCIIパスワードを使用してPHP 5.5パスワードハッシュAPIを使用できます。 password_hashおよびpassword_verify関数はバイナリデータを使用するため、任意の文字のパスワードを処理できます。ただし、さまざまなシステムがASCII以外の文字を異なる方法で処理する可能性があることに注意する必要があるため、パスワードをハッシュする前に正規化することをお勧めします。

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート