検索
ホームページバックエンド開発PHPチュートリアルPHPセキュリティプログラミングの暗号化機能_PHPチュートリアル

PHPセキュリティプログラミングの暗号化機能_PHPチュートリアル

Jul 21, 2016 pm 04:09 PM
php関数暗号化存在する状態安全性私たちデータ人生プログラミング通信網重要


特にインターネット上で大量のトランザクションが発生し、大量のデータが送信されることを考えると、データ暗号化は私たちの生活においてますます重要になっています。セキュリティ対策の導入に興味がある場合は、PHP が提供する一連のセキュリティ機能について学ぶことにも興味があるでしょう。この記事では、アプリケーションにセキュリティ機能を追加できるように、これらの機能を紹介し、基本的な使用法をいくつか紹介します。 予備知識 PHP のセキュリティ機能を詳しく紹介する前に、暗号化についてまだ詳しくない読者に、暗号化に関する基本的な知識を説明するために少し時間を割く必要があります。暗号化の基本概念をすでによく理解している場合は、読み飛ばしていただいても構いません。この部分。 。 暗号動物学は、大まかに言うと、暗号化と復号化の研究と実験です。暗号化は、わかりやすいデータを理解できないデータに変換するプロセスであり、復号化は、理解できないデータを元のわかりやすいデータに変換するプロセスです。理解しにくい情報を暗号、理解しやすい情報を平文と呼びます。 データの暗号化/復号化には特定のアルゴリズムが必要です。これらのアルゴリズムは、有名なシーザー コードなど、非常に単純なものもありますが、現在の暗号化アルゴリズムは比較的複雑で、既存の方法では解読できないものもあります。 PHP暗号化機能 Windows 以外のプラットフォームの使用経験が少しある人は、crypt() に精通しているかもしれません。この関数は、一部のプレーン コードを暗号化できますが、パスワードを元のプレーン コードに変換することはできません。これは一見役に立たない機能のように見えるかもしれませんが、システム パスワードの整合性を確保するために広く使用されています。一方向暗号化されたパスワードは、第三者の手に渡ると平文に戻すことができないため、ほとんど役に立ちません。ユーザーが入力したパスワードを検証するときも、ユーザーの入力は一方向アルゴリズムを使用します。入力が保存されている暗号化されたパスワードと一致する場合、入力されたパスワードは正しい必要があります。 PHP では、crypt() 関数を使用して一方向の暗号化を完了する機能も提供します。ここで関数について簡単に説明します: string crypt (string input_string [, string Salt]) input_string パラメータは暗号化する必要がある文字列で、2 番目のオプションのソルトは暗号化されたパスワードに影響を与える可能性のあるビット文字列で、いわゆる事前計算攻撃の可能性をさらに排除します。デフォルトでは、PHP は 2 文字の DES 干渉文字列を使用します。システムで MD5 (MD5 アルゴリズムについては後で紹介します) を使用する場合は、12 文字の干渉文字列が使用されます。ちなみに、次のコマンドを実行すると、システムが使用する干渉文字列の長さを確認できます: print "My system Salt size is: "。 システムは他の暗号化アルゴリズムもサポートする場合があります。 crypt() は 4 つのアルゴリズムをサポートします。サポートするアルゴリズムと対応する Salt パラメーターの長さは次のとおりです。 アルゴリズム 塩の長さ CRYPT_STD_DES 2 文字 (デフォルト) CRYPT_EXT_DES 9文字 CRYPT_MD5 102/tdで始まる12文字> CRYPT_BLOWFISH 102/tdで始まる16文字> crypt()を使用したユーザー認証の実装 crypt() 関数の例として、正しいユーザー名とパスワードを提供できるユーザーのみにディレクトリへのアクセスを制限する PHP スクリプトを作成する状況を考えてみましょう。私のお気に入りのデータベースである MySQL のテーブルにデータを保存します。 members というテーブルを作成することから例を始めましょう。 mysql>CREATE TABLE members (
->ユーザー名 CHAR(14) NOT NULL,
->パスワード CHAR(32) NOT NULL,
->PRIMARY KEY(ユーザー名)
->); 次に、次のデータがすでにテーブルに格納されていると仮定します。 ユーザー名 パスワード クラーク ケロD1C377lKE ブルース ba1T7vnz9AWgk ピーター ぱるvRWsRLZ4U これらの暗号化されたパスワードに対応する平文コードは、それぞれ kent、banner、parker です。各パスワードの最初の 2 文字に注意してください。これは、次のコードを使用してパスワードの最初の 2 文字に基づいて干渉文字列を作成したためです。 .
= substr(, 0, 2);
= crypt(, );
// その後、ユーザー名とともに MySQL に保存されます Apache のパスワード応答認証構成を使用して、ユーザーにユーザー名とパスワードの入力を求めます。PHP についてはあまり知られていませんが、Apache パスワード応答システムによって入力されたユーザー名とパスワードを認識できるということです。これらの ID を使用します。検証スクリプトでは 2 つの変数が使用されます。以下のコードをよりよく理解するために、時間をかけて以下のスクリプトを注意深く読み、説明にもっと注意を払ってください。 crypt() と Apache のパスワード応答検証システムの応用
= "localhost";
= "zorro";
= "hellodolly";
= "users";

// 認証を False に設定します

= 0;

// ユーザーがユーザー名とパスワードを入力しました

if (isset() && isset()) :

mysql_pconnect(, , ) または die("MySQL
サーバーに接続できません!");

mysql_select_db() または die("接続できますデータベースを選択しないでください!");

// 暗号化を実行します
= substr(, 0, 2);
= crypt(, );

// クエリを構築します

= "SELECT username FROM members WHERE
username = '' AND
password = ''";

// クエリを実行します

if (mysql_numrows(mysql_query()) == 1) :
= 1;
endif;

endif;

// 認可を確認します

if (! ) :

header('WWW-Authenticate: Basic realm="Private"');
header('HTTP/1.0 401 Unauthorized');
print "このエリアに入る権限がありません。";
exit;

else :

print "これは秘密のデータです!";

endif;

?> 上記は、ユーザーのアクセス権を確認するための簡易認証システムです。重要な機密情報を保護するために crypt() を使用する場合は、デフォルトで使用される crypt() が最も安全ではなく、より高いセキュリティ要件が必要な場合にのみ使用できることに注意してください。パフォーマンスには、この後で紹介するアルゴリズムが必要です。記事。 次に、PHP━━md5() でサポートされている別の関数を紹介します。この関数は MD5 ハッシュ アルゴリズムを使用します。これには、言及する価値のあるいくつかの興味深い用途があります。 混合 ハッシュ関数は、可変長メッセージを固定長のハッシュ出力 (「メッセージ ダイジェスト」とも呼ばれます) に変換します。これは、固定長の文字列を使用してファイルの整合性をチェックし、デジタル署名とユーザー認証を検証できるため便利です。これは PHP に適しているため、PHP の組み込み md5() ハッシュ関数は可変長メッセージを 128 ビット (32 文字) のメッセージ ダイジェストに変換します。混合エンコーディングの興味深い特徴は、混合結果が元のプレーン コードの内容に依存しないため、混合情報を分析しても元のプレーン コードを取得できないことです。 文字列内の 1 文字だけを変更した場合でも、MD5 ハイブリッド アルゴリズムは 2 つのまったく異なる結果を計算します。まず、次の表の内容とそれに対応する結果を見てみましょう。 md5() を使用して文字列を混合する = "これは私が今書いたメッセージです";
= md5();
print "ハッシュ: ";
?> 結果: ハッシュ: 81ea092649ca32b5ba375e81d8f4972c 結果の長さは 32 文字であることに注意してください。次の表をもう一度見てください。値がわずかに変更されています。 md5() を使用して、わずかに変更された文字列をシャッフルする //メッセージに 1 つ欠けていることに注意してください
= "これは私が今書いたメッセージです";
= md5();
print "hash2:

";
?> 結果: ハッシュ 2: e86cf511bd5490d46d5cd61738c82c0c 両方の結果の長さは 32 文字ですが、平文の小さな変更が結果に大きな変更を引き起こすことがわかります。したがって、ハッシュ関数と md5() 関数は、データの小さな変更を確認する良い方法です。のツール。 crypt() と md5() にはそれぞれ用途がありますが、どちらも機能に一定の制限があります。次のセクションでは、PHP ユーザーの暗号化オプションを大幅に拡張する、Mcrypt と Mhash という 2 つの非常に便利な PHP 拡張機能を紹介します。 上記のセクションでは一方向暗号化の重要性について説明しましたが、暗号化後にパスワード データを元のデータに復元する必要がある場合があります。幸いなことに、PHP はこれを Mcrypt 拡張ライブラリの形式で提供します。 マクリプト Mcrypt 2.5.7 Unix | Mcrypt 2.4.7 は、強力な暗号化アルゴリズム拡張ライブラリであり、次のアルゴリズムを含む 22 のアルゴリズムが含まれています。 Blowfish RC2 Safer-sk64 xtea キャスト-256 RC4 セーファー-sk128 DES RC4-iv サーペント Enigma Rijndael-128 スリーウェイ Gost Rijndael-192 TripleDES LOKI97 Rijndael-256 トゥーフィッシュ パナマセーファープラス ウェイク インストール: Mcrypt は標準の PHP ソフトウェア パッケージには含まれていないため、ダウンロード アドレスは ftp://argeas.cs-net.gr/pub/unix/mcrypt/ です。ダウンロード後、次のようにコンパイルし、PHP で展開します。 Mcrypt パッケージをダウンロードします。 Gunzipmcrypt-x.x.x.tar.gz tar -xvfmcrypt-x.x.x.tar ./configure --disable-posix-threads 作る インストールする cd を使用して PHP ディレクトリに移動します。 ./configure -with-mcrypt=[dir] [--other-configuration-directives] 作る インストールする もちろん、要件や、PHP のインストールとインターネット サーバー ソフトウェアとの関係に応じて、上記のプロセスを適切に変更する必要がある場合があります。 Mcrypt を使用する Mcrypt の利点は、多くの暗号化アルゴリズムを提供するだけでなく、データを暗号化/復号化できることです。さらに、データを処理するための 35 の関数も提供します。これらの関数の詳細についてはこの記事の範囲を超えていますが、代表的な関数をいくつか簡単に紹介します。 まず、Mcrypt 拡張ライブラリを使用してデータを暗号化する方法と、それを使用して復号化する方法を説明します。次のコードは、最初にデータを暗号化し、次に暗号化されたデータをブラウザ上に表示し、暗号化されたデータを元の文字列に復元して、ブラウザ上に表示します。 Mcrypt を使用してデータを暗号化および復号化する
// 暗号化する文字列を指定
= "ブルース・シュナイアー著の応用暗号は
素晴らしい暗号リファレンスです。";

// 暗号化/復号化キー
key = "4 スコア、20 年前";

// 暗号化アルゴリズム
= MCRYPT_RIJNDAEL_128;

// セキュリティを強化するための初期化ベクトルを作成します。
= mcrypt_create_iv(mcrypt_get_iv_size(,
MCRYPT_MODE_ECB), MCRYPT_RAND);

// 元の文字列を出力します
print "文字列:

";

// 暗号化
= mcrypt_encrypt(, key,
, MCRYPT_MODE_CBC, );

// 16 進数に変換してブラウザに出力
print "暗号化された文字列: ".bin2hex()."< ;p>";

= mcrypt_decrypt(, key,
, MCRYPT_MODE_CBC, );

print "復号化された文字列: ";

?> 上記のスクリプトを実行すると、次の出力が生成されます。 元の文字列: Bruce Schneier 著の『Applied Cryptography』は、素晴らしい暗号化リファレンスです。 暗号化された文字列: 02a7c58b1ebd22a9523468694b091e60411cc4dea8652bb8072 34fa06bbfb20e71ecf525f29df58e28f3d9bf541f7ebcecf62b c89fde4d8e7ba1e6cc9ea2485047 8c 11742f5cfa1d23fe22fe8 bfbab5e Bruce Schneier 著の『復号化された文字列: Applied Cryptography』は、素晴らしい暗号化リファレンスです。 上記のコードの 2 つの最も典型的な関数は mcrypt_encrypt() と mcrypt_decrypt() であり、それらの用途は明らかです。私は「Telegraph Codebook」モードを使用しました。Mcrypt にはいくつかの暗号化方法が用意されています。各暗号化方法にはパスワードのセキュリティに影響を与える可能性のある特定の文字があるため、各モードを理解する必要があります。暗号システムの経験がない読者にとっては、mcrypt_create_iv() 関数の方が興味深いかもしれませんが、この関数の詳細な説明はこの記事の範囲を超えていますが、この関数が作成する初期化ベクトルについても触れておきます (したがって、iv)。このベクトルにより、各情報を互いに独立させることができます。すべてのモードでこの初期化変数が必要なわけではありませんが、この変数が必要なモードで提供されていない場合、PHP は警告メッセージを発行します。 Mhash拡張ライブラリ http://sourceforge.net/projects/mhash/ バージョン 0.8.3 の Mhash 拡張ライブラリは 12 の混合アルゴリズムをサポートしています。Mhash v.0.8.3 のヘッダー ファイル mhash.h を注意深く調べると、次の混合アルゴリズムがサポートされていることがわかります。 CRC32HAVAL160MD5 CRC32B HAVAL192 RIPEMD160 ゴストハヴァル224 SHA1 HAVAL128 HAVAL256 タイガー インストール Mcrypt と同様に、Mhash は PHP パッケージには含まれていません。Windows 以外のユーザーの場合、インストール プロセスは次のとおりです。 Mhash 拡張ライブラリをダウンロードする Gunzipmhash-x.x.x.tar.gz tar -xvfmhash-x.x.x.tar 。/構成、設定 作る インストールする cd ./configure -with-mhash=[dir] [--other-configuration-directives] 作る インストールする Mcrypt と同様、インターネット サーバー ソフトウェアへの PHP のインストール方法によっては、Mhash の追加構成が必要になる場合があります。 Windows ユーザーの場合は、Mhash 拡張ライブラリを含む優れた PHP パッケージが http://www.php4win.de にあります。ダウンロードして解凍し、readme.first ドキュメントの指示に従ってインストールするだけです。 Mhash を使用する 情報の混合は非常に簡単です。次の例を見てください。 = MHASH_TIGER;
= "秘密の砦への道順です。左に2歩、右に3歩、チャチャチャです。";
= mhash(, );
print "ハッシュ化されたメッセージは "です。 bin2hex();
?> このスクリプトを実行すると、次の出力が得られます。ハッシュされたメッセージは 07a92a4db3a4177f19ec9034ae5400eb60d1a9fbb4ade461 です。 ここで bin2hex() 関数を使用する目的は、出力を理解しやすくすることです。これは、混合結果がバイナリ形式であるため、理解しやすい形式に変換する必要があります。 。 シャッフルは一方向関数であり、その結果は入力に依存しないため、この情報は公開できることに注意することが重要です。この戦略は通常、ユーザーがダウンロードしたファイルとシステム管理者が提供したファイルを比較してファイルの整合性を確保できるようにするために使用されます。 Mhash には他にも便利な機能がいくつかあります。たとえば、Mhash でサポートされているアルゴリズムの名前を出力する必要があります。Mhash でサポートされているすべてのアルゴリズムの名前は MHASH_ で始まるため、このタスクは次のコードを実行することで実行できます。 = MHASH_TIGER;
print "このデータは、".mhash_get_hash_name()." ハッシュ アルゴリズムでハッシュされています。";
?> 結果の出力は次のようになります。 このデータは TIGER ハッシュ アルゴリズムでハッシュされています。 PHP と暗号化について最後に注意すべき点が 1 つあります PHP と暗号化に関して最後に注意すべき重要な点は、サーバーとクライアントの間で転送されるデータは転送中に安全ではないということです。 PHP はサーバー側のテクノロジーであるため、送信中のデータ漏洩を防ぐことはできません。したがって、完全に安全なアプリケーションを実装したい場合は、Apache-SSL またはその他の安全なサーバー構成を使用することをお勧めします。 結論は この記事では、PHP の最も便利な機能の 1 つであるデータ暗号化について紹介します。PHP の組み込みの crypt() および md5() 暗号化関数について説明するだけでなく、データ暗号化用の強力な拡張ライブラリである Mcrypt および Mhash についても説明します。この記事の最後に、真に安全な PHP アプリケーションには安全なサーバーも含める必要があることを指摘しておく必要があります。PHP はサーバー側のテクノロジであるため、データのセキュリティを確保することはできません。担当編集:シャオ・リー

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/314395.html技術記事特にインターネット上で大量のトランザクションが発生し、大量のデータが送信されることを考えると、データ暗号化は私たちの生活においてますます重要になっています。安全対策にご興味のある方は...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPセッションの概念を簡単に説明してください。PHPセッションの概念を簡単に説明してください。Apr 26, 2025 am 12:09 AM

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPセッションに保存されているすべての値をどのようにループしますか?PHPセッションに保存されているすべての値をどのようにループしますか?Apr 26, 2025 am 12:06 AM

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

ユーザー認証にセッションを使用する方法を説明します。ユーザー認証にセッションを使用する方法を説明します。Apr 26, 2025 am 12:04 AM

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

PHPセッションにユーザーの名前を保存する方法の例を挙げてください。PHPセッションにユーザーの名前を保存する方法の例を挙げてください。Apr 26, 2025 am 12:03 AM

tostoreauser'snameInappession、starthessession withsession_start()、thensignthenameto $ _session ['username']。1)ousession_start()toinitializethessession.2)assighttheuser'snameto $ _ session ['username']

PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?Apr 25, 2025 am 12:16 AM

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッション関連の問題をどのようにデバッグしますか?PHPでセッション関連の問題をどのようにデバッグしますか?Apr 25, 2025 am 12:12 AM

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()が複数回呼び出されるとどうなりますか?session_start()が複数回呼び出されるとどうなりますか?Apr 25, 2025 am 12:06 AM

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでセッションのライフタイムをどのように構成しますか?PHPでセッションのライフタイムをどのように構成しますか?Apr 25, 2025 am 12:05 AM

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

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

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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 プラットフォームで実行できます。