特にインターネット上で大量のトランザクションが発生し、大量のデータが送信されることを考えると、データ暗号化は私たちの生活においてますます重要になっています。セキュリティ対策の導入に興味がある場合は、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
= "秘密の砦への道順です。左に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 はサーバー側のテクノロジであるため、データのセキュリティを確保することはできません。担当編集:シャオ・リー

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

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

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

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

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
