特にインターネット上で大量のトランザクションが発生し、大量のデータが送信されることを考えると、データ暗号化は私たちの生活においてますます重要になっています。セキュリティ対策の導入に興味がある場合は、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
$1$で始まる12文字
CRYPT_BLOWFISH
$2$で始まる16文字
crypt()を使用したユーザー認証の実装
crypt() 関数の例として、正しいユーザー名とパスワードを提供できるユーザーのみにディレクトリへのアクセスを制限する PHP スクリプトを作成する状況を考えてみましょう。私のお気に入りのデータベース MySQL のテーブルにデータを保存します。 members というテーブルを作成することから例を始めましょう。
mysql>CREATE TABLE メンバー (
->ユーザー名 CHAR(14) NOT NULL、
->パスワード CHAR(32) NOT NULL、
->PRIMARY KEY(ユーザー名)
-> ;);
次に、次のデータがすでにテーブルに格納されていると仮定します。
ユーザー名
パスワード
クラーク
ケロD1C377lKE
ブルース
ba1T7vnz9AWgk
ピーター
ぱるvRWsRLZ4U
これらの暗号化されたパスワードに対応する平文コードは、それぞれ kent、banner、parker です。各パスワードの最初の 2 文字に注意してください。これは、次のコードを使用してパスワードの最初の 2 文字に基づいて干渉文字列を作成したためです。
$enteredPassword.
$salt = substr($enteredPassword, 0, 2);
$userPswd = crypt($enteredPassword, $salt);
// $userPswd はユーザー名とともに MySQL に保存されます真ん中
Apache のパスワード応答認証構成を使用して、ユーザーにユーザー名とパスワードの入力を求めます。PHP についてはあまり知られていませんが、Apache パスワード応答システムによって入力されたユーザー名とパスワードが $PHP_AUTH_USER および $PHP_AUTH_PW I として認識されるということです。は、認証スクリプトでこれら 2 つの変数を使用します。以下のコードをよりよく理解するために、時間をかけて以下のスクリプトを注意深く読み、説明にもっと注意を払ってください。
crypt() と Apache のパスワード応答検証システムの応用
$host = "localhost";
$user = "zorro";
$pswd = "hellodolly";
$db = "users";
// 認証を False に設定します
$authorization = 0;
// ユーザーがユーザー名とパスワードを入力したことを確認します
if (isset($PHP_AUTH_USER) && isset($PHP_AUTH_PW)) :
mysql_pconnect($host, $user, $pswd) または die("MySQL
サーバーに接続できません!");
mysql_select_db( $db) または die("データベースを選択できません!");
// 暗号化を実行します
$salt = substr($PHP_AUTH_PW, 0, 2);
$encrypted_pswd = crypt ($PHP_AUTH_PW, $salt);
// クエリを構築します
$query = "SELECT username FROM members WHERE
username = '$PHP_AUTH_USER' AND
password = ' $encrypted_pswd'";
// クエリを実行します
if (mysql_numrows(mysql_query($query)) == 1) :
$authorization = 1;
endif;
endif;
// 認可の確認
if (! $authorization) :
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() を使用して文字列を混合する
$msg = "これは私が今書いたメッセージです";
$enc_msg = md5($msg);
print "hash: $enc_msg ";
?>
結果: ハッシュ: 81ea092649ca32b5ba375e81d8f4972c
結果の長さは 32 文字であることに注意してください。次の表をもう一度見てください。$msg の値がわずかに変更されています。
md5() を使用して、わずかに変更された文字列をシャッフルする
//メッセージに 1 つ欠けていることに注意してください
$msg = "これは私が今書いたメッセージです";
$enc_msg = md5($msg);
print "hash2: $enc_msg
";
?>
結果: ハッシュ 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 を使用してデータの追加、解読を実行する
// 暗号化する文字列を指定
$string = "Applied Cryptography, by Bruce Schneier は
素晴らしい暗号化リファレンスです。";
//暗号化/復号化キー
$key = "4 スコアと 20 年前";
// 暗号化アルゴリズム
$cipher_alg = MCRYPT_RIJNDAEL_128;
// の初期化ベクトルを作成しますセキュリティが追加されました。
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,
MCRYPT_MODE_ECB), MCRYPT_RAND);
// 元の文字列を出力
print "元の文字列: $string
";
// $string を暗号化
$encrypted_string = mcrypt_encrypt($cipher_alg, $key,
$string, MCRYPT_MODE_CBC, $iv);
// 16 進数に変換そしてブラウザに出力します
print "暗号化された文字列: ".bin2hex($encrypted_string)."
";
$decrypted_string = mcrypt_decrypt($cipher_alg, $key,
$encrypted_string, MCRYPT_MODE_CBC, $iv);
print "復号化された文字列: $decrypted_string";
?>
上のスクリプトを実行すると、次の出力が生成されます。
元の文字列: Bruce Schneier 著の『Applied Cryptography』は、素晴らしい暗号化リファレンスです。
暗号化された文字列: 02a7c58b1ebd22a9523468694b091e60411cc4dea8652bb8072 34fa06bbfb20e71ecf525f29df58e28f3d9bf541f7ebcecf62b c89fde4d8e7ba1e6cc9ea24850478c1 1742f5cfa1d23fe22fe8 bfbab5e
Bruce Schneier 著の『復号化された文字列: Applied Cryptography』は、素晴らしい暗号化リファレンスです。
上記のコードの 2 つの最も典型的な関数は mcrypt_encrypt() と mcrypt_decrypt() であり、これらの使用法は容易に理解できます。暗号化の安全に影響を与える可能性のある特定の文字があるため、各モードで理解する必要があります。 暗号化システムと接触しないユーザーにとっては、mcrypt_create_iv() 関数がさらに重要になる可能性がありますが、この関数の根本的な解決はすでに終了しています。この文の部分ではあるが、私たちは、すべてのモードではないにしても、この初期化量を必要とする、その確立された初期化量(したがって、iv)について言及する。のモードでは、この量が提供されていないと、PHP によって警告メッセージが表示されることがあります。
Mhash扩展库
http://sourceforge.net/projects/mhash/
0.8.3 バージョンの Mhash 展库12 混合計算法をサポート、仔细检查Mhash v.0.8.3 のファイルファイル mhash.h を知ることができ、次の面の混合計算法をサポートします。
CRC32 HAVAL160 MD5
CRC32B HAVAL192 RIPEMD160
ゴストハヴァル224 SHA1
HAVAL128 HAVAL256 タイガー
設置
象Mcrypt一样、MhashはPHPパッケージに含まれていません、Windows以外の場合、以下はインストール手順です:
ダウンロードMhash扩展库
Gunzipmhash-x.x.x.tar.gz
tar -xvfmhash-x.x.x.tar
./configure
作る
インストールする
cd
$message = "秘密の砦への道順です。左に 2 歩、右に 3 歩、チャチャチャです。";
$hashed_message = mhash( $hash_alg, $message);
print "ハッシュ化されたメッセージは " です。 bin2hex($hashed_message);
?>
この段階のスクリプトを実行すると次の出力結果が得られます: ハッシュされたメッセージは 07a92a4db3a4177f19ec9034ae5400eb60d1a9fbb4ade461 です
ここでの bin2hex() 関数の目的は、$hashed_message の出力を理解することです。これは、混同された結果が二重形式であるため、理解しやすい形式に変換するには、十六形式に変換する必要があります。 。
このポリシーは通常、ユーザーがダウンロードしたファイルとシステム管理者が提供するファイルを比較して、ファイルの完全性を保証するために使用されるものであることに注意してください。性。
Mhash には他にもいくつかの便利な関数があります。たとえば、Mhash でサポートされているアルゴリズムの名前を出力する必要があります。Mhash でサポートされているすべてのアルゴリズムの名前は MHASH_ で始まるため、このタスクは次のコードを実行することで実行できます。
$hash_alg = MHASH_TIGER;
print "このデータは、".mhash_get_hash_name($hashed_message)." ハッシュ アルゴリズムでハッシュされています。";
?>
結果の出力は次のようになります。 このデータは 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中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
