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

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

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

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 までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

See all articles