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

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()

これにより、ハッシュ値を確認するために他の情報をデータベースに保存する必要がないことが保証されます。

実際には、次のように見えます:

<?php
$password = "sitepoint";

$hashed_password = password_hash($password, PASSWORD_DEFAULT);

if (password_verify($password, $hashed_password)) {
    //如果输入的密码与哈希密码匹配,则登录成功
} else {
    //重定向到主页
}
関数の詳細については、こちらをご覧ください。

関数の情報については、こちらをご覧ください。 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 までご連絡ください。
PHPでインターフェイスをどのように作成して使用しますか?PHPでインターフェイスをどのように作成して使用しますか?Apr 30, 2025 pm 03:40 PM

この記事では、PHPでインターフェイスを作成、実装、および使用する方法について説明し、コード組織と保守性の利点に焦点を当てています。

crypt()とpassword_hash()の違いは何ですか?crypt()とpassword_hash()の違いは何ですか?Apr 30, 2025 pm 03:39 PM

この記事では、PHPのCrypt()とpassword_hash()の違いについて、パスワードハッシュの違いについて説明し、最新のWebアプリケーションの実装、セキュリティ、および適合性に焦点を当てています。

PHPのクロスサイトスクリプト(XSS)をどのように防ぐことができますか?PHPのクロスサイトスクリプト(XSS)をどのように防ぐことができますか?Apr 30, 2025 pm 03:38 PM

記事では、入力検証、出力エンコード、およびOWASP ESAPIやHTML浄化器などのツールを使用して、PHPのクロスサイトスクリプト(XSS)を防止します。

PHPの自動装置は何ですか?PHPの自動装置は何ですか?Apr 30, 2025 pm 03:37 PM

PHPでのオートローディングは、必要に応じてクラスファイルを自動的にロードし、メモリの使用を削減し、コード組織を強化することでパフォーマンスを向上させます。ベストプラクティスには、PSR-4の使用とコードを効果的に整理することが含まれます。

PHPストリームとは何ですか?PHPストリームとは何ですか?Apr 30, 2025 pm 03:36 PM

PHPストリームは、一貫したAPIを介したファイル、ネットワークソケット、圧縮形式などのリソースの処理を統合し、複雑さを抽象化し、コードの柔軟性と効率を高めます。

PHPを使用してアップロードできるファイルの最大サイズはどれくらいですか?PHPを使用してアップロードできるファイルの最大サイズはどれくらいですか?Apr 30, 2025 pm 03:35 PM

この記事では、PHPでファイルアップロードサイズの管理を管理し、2MBのデフォルト制限とPHP.ini設定を変更してそれを増やす方法に焦点を当てています。

PHPのめまいの種類とは何ですか?PHPのめまいの種類とは何ですか?Apr 30, 2025 pm 03:34 PM

この記事では、PHP 7.1で導入されたPHPのヌル可能なタイプについて説明し、変数またはパラメーターが指定されたタイプまたはnullのいずれかを可能にします。読みやすさの改善、タイプの安全性、明示的な意図などの利点を強調し、宣言する方法を説明します

unset()とlink()関数の違いは何ですか?unset()とlink()関数の違いは何ですか?Apr 30, 2025 pm 03:33 PM

この記事では、プログラミングのunset()とlink()関数の違いについて説明し、目的とユースケースに焦点を当てています。 unset()はメモリから変数を削除しますが、link()はファイルシステムからファイルを削除します。どちらもEFFECにとって重要です

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。