検索
ホームページバックエンド開発PHPチュートリアルPHP_PHP チュートリアルでパスワードを処理するいくつかの方法

PHP_PHP チュートリアルでパスワードを処理するいくつかの方法

Jul 13, 2016 am 09:45 AM
phpweb使用数種類存在する対処するパスワード開発する方法使用

PHP でパスワードを処理するいくつかの方法

PHP を使用して Web アプリケーションを開発する場合、多くのアプリケーションではユーザーの登録が必要になります。登録時に、ユーザーの情報を処理する必要があります。最も一般的なのは電子メールとパスワードです。この記事は、パスワードの処理、つまりパスワードの暗号化について説明することを目的としています。

MD5

多くの PHP 開発者が初めて PHP に触れたとき、パスワードを処理するために好まれる暗号化関数は MD5 ではないかと思います。当時私は次のように考えていました。

$password = md5($_POST["パスワード"]);

上記のコードはよく知られていますか? しかし、MD5 暗号化方式は、その暗号化アルゴリズムが実際には少し単純であり、多くのパスワード クラッキング サイトに大量のパスワード文字列が保存されているため、現在 PHP の世界ではあまり普及していないようです。 MD5 によって暗号化されるため、ここではユーザー パスワードの暗号化に MD5 のみを使用することを強くお勧めしません。

SHA256とSHA512

実は以前のMD5​​と同時にSHA1暗号化方式も存在しますが、アルゴリズムは比較的単純なのでここでは簡単に触れておきます。ここで説明する SHA256 と SHA512 はどちらも SHA2 ファミリの暗号化関数であり、名前を見れば推測できるかもしれませんが、これら 2 つの暗号化方式はそれぞれ 256 ビット長と 512 ビット長のハッシュ文字列を生成します。

使用方法は次のとおりです:

$password = hash("sha256", $password);

PHP には hash() 関数が組み込まれています。 hash() 関数に暗号化メソッドを渡すだけです。 sha256、sha512、md5、sha1 などの暗号化方式を直接指定できます。

塩分値

暗号化プロセスには、非常に一般的な小さなパートナーであるソルト値もあります。はい、暗号化するときは、一定レベルのセキュリティを達成するために、暗号化された文字列に実際に追加の文字列を追加します。

関数generateHashWithSalt($password) {

$intermediateSalt = md5(uniqid(rand(), true));

$salt = substr($intermediateSalt, 0, 6);

ハッシュを返す("sha256", $password . $salt);

}

Bcrypt

暗号化方式を提案するとしたら、後で説明する Hashing API を強く推奨するため、Bcrypt が最低要件になるかもしれませんが、Bcrypt も比較的優れた暗号化方式です。

関数generateHash($password) {

if (define("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {

$salt = '$2y$11$' .substr(md5(uniqid(rand(), true)), 0, 22);

return crypt($password, $salt);

}

}

Bcrypt は実際には Blowfish 関数と crypt() 関数を組み合わせたものです。ここでは CRYPT_BLOWFISH を使用して Blowfish が利用可能かどうかを判断し、上記のようにソルト値を生成します。ただし、ここで注意しなければならないのは、crypt() のソルト値です。 $2a$ または $2y$ から始まり、詳細については以下のリンクを参照してください:

http://www.php.net/security/crypt_blowfish.php

詳しい情報はこちらからご覧ください:

http://php.net/manual/ja/function.crypt.php

パスワードハッシュAPI

これが私たちのハイライトです。PHP 5.5 以降でのみ利用できる新機能です。これは主に次の機能を提供します。

password_hash() – パスワードを暗号化します。

Password_verify() – 暗号化されたパスワードを検証し、ハッシュ文字列が一貫しているかどうかを確認します。

password_needs_rehash() – パスワードを再暗号化します。

password_get_info() – 暗号化アルゴリズムの名前といくつかの関連情報を返します。

crypt() 関数を使用するのに十分ですが、password_hash() はコードを短くするだけでなく、セキュリティ保護も強化します。そのため、PHP 関係者は現在この方法を推奨しています ユーザーのパスワードを暗号化するために、Laravel などの多くの人気のあるフレームワークが使用されています。この暗号化方式を使用してください。

$hash = パスワード_ハッシュ($password, PASSWORD_DEFAULT);

はい、たった 1 行のコードで、すべて完了です。

PASSWORD_DEFAULT は現在 Bcrypt を使用しているため、上記でこれをお勧めします。ただし、Password Hashing API の方が優れた機能を備えているため、厳粛に Password Hashing API を推奨します。ここで注意する必要があるのは、コードで PASSWORD_DEFAULT 暗号化方式を使用する場合、データベース テーブルでパスワード フィールドの長さを 60 文字以上に設定する必要があるということです。この場合、暗号化された文字列 PASSWORD_BCRYPT も使用できます。長さは常に 60 文字になります。

ここでpassword_hash()を使用する場合、ソルト値(salt)と消費値(コスト)を指定する必要はありません。後者はコストが大きいほど暗号化が複雑になると理解できます。アルゴリズムとメモリ消費量が大きくなります。もちろん、対応する塩分値と消費量値を指定する必要がある場合は、次のように記述できます:

$options = [

'salt' =>custom_function_for_salt(), //適切なソルトを生成する独自のコードを作成します

'cost' => 12 // デフォルトのコストは10です

];

$hash =password_hash($password, PASSWORD_DEFAULT, $options);

パスワードが暗号化された後、ユーザーが入力したパスワードが正しいかどうかを判断するためにパスワードを検証する必要があります:

if (password_verify($password, $hash)) {

// パス

}

その他 {

// 無効です

}

とても簡単で、password_verifyを直接使って、前に暗号化した(データベースに保存されている)文字列を検証するだけです。

しかし、時々暗号化方法を変更する必要がある場合、例えば、ある日突然ソルト値を変更したり、消費値を増やしたい場合は、この時点でpassword_needs_rehash()関数を使用します。

if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {

// コストを12に変更

$hash =password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);

// 新しいハッシュを保存することを忘れないでください!

}

この方法でのみ、PHP のパスワード ハッシュ API は暗号化方法が再度変更されたことを認識します。これの主な目的は、その後のパスワード検証です。

password_get_info()について簡単に説明すると、この関数は一般に次の3つの情報を確認できます。

algo – アルゴリズムの例

algoName – アルゴリズム名

options – 暗号化時のオプションのパラメータ

それでは、今すぐ PHP 5.5 を使い始めて、それ以前のバージョンについてはもう心配しないでください。

http://www.bkjia.com/PHPjc/1041132.html

tru​​ehttp://www.bkjia.com/PHPjc/1041132.html技術記事 PHP がパスワードを処理するためのいくつかの方法。PHP を使用して Web アプリケーションを開発する場合、多くのアプリケーションではユーザーの登録が必要になります。最も一般的なのは、ユーザーの情報を処理する必要があることです。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
トラフィックの高いウェブサイトのPHPパフォーマンスチューニングトラフィックの高いウェブサイトのPHPパフォーマンスチューニングMay 14, 2025 am 12:13 AM

thesecrettokeepingaphp-poweredwebsterunningsmootlyunderheavyloadinvolvesseveralkeystrategies:1)emform opcodecoduceSciptionexecutiontime、2)aatabasequerycachingwithiThing withiThistolessendavasoload、

PHPでの依存関係注射:初心者向けのコード例PHPでの依存関係注射:初心者向けのコード例May 14, 2025 am 12:08 AM

コードをより明確かつ維持しやすくするため、依存関係が関心(DI)に注意する必要があります。 1)DIは、クラスを切り離すことにより、よりモジュール化されます。2)テストとコードの柔軟性の利便性を向上させ、3)DIコンテナを使用して複雑な依存関係を管理しますが、パフォーマンスの影響と円形の依存関係に注意してください。

PHPパフォーマンス:アプリケーションを最適化することは可能ですか?PHPパフォーマンス:アプリケーションを最適化することは可能ですか?May 14, 2025 am 12:04 AM

はい、最適化されたAphPossibleandessention.1)CachingingusapCutoredatedAtabaseload.2)最適化、効率的なQueries、およびConnectionPooling.3)EnhcodeCodewithBultinctions、Avoididingglobalbariables、およびUsingopcodeching

PHPパフォーマンスの最適化:究極のガイドPHPパフォーマンスの最適化:究極のガイドMay 14, 2025 am 12:02 AM

keyStrategIestsoSificlyvoostphpappliceperformanceare:1)useopcodecachinglikeToreexecutiontime、2)最適化abaseの相互作用とプロペラインデックス、3)3)構成

PHP依存性噴射コンテナ:クイックスタートPHP依存性噴射コンテナ:クイックスタートMay 13, 2025 am 12:11 AM

aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

PHPの依存噴射対サービスロケーターPHPの依存噴射対サービスロケーターMay 13, 2025 am 12:10 AM

SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

PHPパフォーマンス最適化戦略。PHPパフォーマンス最適化戦略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

PHPメールの検証:電子メールが正しく送信されるようにしますPHPメールの検証:電子メールが正しく送信されるようにしますMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール