ホームページ  >  記事  >  バックエンド開発  >  mcrypt を有効にした暗号化と復号化プロセスの詳細な分析_PHP チュートリアル

mcrypt を有効にした暗号化と復号化プロセスの詳細な分析_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 14:59:17922ブラウズ

Mcrypt 拡張ライブラリは、暗号化および復号化機能を実現できます。つまり、平文を暗号化するだけでなく、暗号文を復元することもできます。

1. PHP 暗号化拡張ライブラリ Mcrypt のインストール
標準的な PHP インストール プロセスでは Mrcypt はインストールされませんが、PHP のメイン ディレクトリには libmcrypt.dll および libmhash.dll ファイルが含まれています (libmhash.dll は Mhash 拡張ライブラリです。ここで一緒にインストールされます)。まず、これら 2 つのファイルをシステム ディレクトリ windowssystem32 にコピーし、PHP.ini ファイル内で Ctrl+F ショートカット キーを押して検索ボックスを表示し、extension=php-mcrypt.dll と extension=php_mhash.dll を見つけます。ステートメントを作成し、その前の「;」を削除して、最後に保存して Apache サーバーを再起動して有効にします。

2. PHP 暗号化拡張ライブラリ Mcrypt のアルゴリズムと暗号化モード
Mcrypt ライブラリは 20 を超える暗号化アルゴリズムと 8 つの暗号化モードをサポートしており、関数 mcrypt_list_algorithms() および mcrypt_list_modes() によって表示できます。 :

Mcrypt は次のアルゴリズムをサポートしています: cast-128 gost rijndael-128 twofish arcfour Cast-256 loki97 rijndael-192 searplus wake bullfish-compat des rijndael-256 serpent xtea bullfish enigma rc2 Triples

Mcrypt でサポートされている暗号化モードは次のとおりです: cbc cfb ctr ecb ncfb nofb ofb stream

これらのアルゴリズムとモードは、次の Mcrypt アプリケーションの例に示すように、アプリケーション内で定数で表す必要があります。
DES アルゴリズムは MCRYPT_DES で表されます。 MCRYPT_MODE_ECB による;
3. PHP 暗号化拡張ライブラリ Mcrypt アプリケーション

まず Mcrypt のワークフローを理解するために例を見てから、いくつかのプロセスで使用される関数を見てみましょう:

コードをコピーします

コードは次のとおりです。 : $str = " 私はリーユンです";
$key = "123qwe.019860905061X";
$cipher = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_ECB;
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$)モード),MCRYPT_RAN D);

echo "元のテキスト: ".$str."
";
$str_encrypt = mcrypt_encrypt($cipher,$key,$str,$mode,$iv);

echo "暗号化されたコンテンツは:"。 $str_encrypt."
";


$str_decrypt = mcrypt_decrypt($cipher,$key,$str_encrypt,$mode,$iv);

echo "復号化されたコンテンツ: ".$str_decrypt."
";


実行結果:


原文:私は李雲です暗号化された内容は:B @鴹�=(私はZ%を主張します復号された内容:私は李雲です



この例からわかるように、PHP 暗号化拡張ライブラリ Mcrypt を使用してデータを暗号化および復号化する前に、略して iv と呼ばれる初期化ベクトルが最初に作成されます。 $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND); から、初期化ベクトルの作成には 2 つのパラメーターが必要であることがわかります。size は iv のサイズを指定し、source は iv のソースであり、値 MCRYPT_RAND は次のとおりです。システム乱数。

関数 mcrypt_get_iv_size($cipher,$modes) は、初期化ベクトルのサイズを返します。パラメーター cipher と mode は、それぞれアルゴリズムと暗号化モードを参照します。

<3>

暗号化関数 $str_encrypt = mcrypt_encrypt($cipher,$key,$str,$modes,$iv); この関数の 5 つのパラメータは次のとおりです: cipher—暗号化アルゴリズム、key—key 、data(str)—暗号化する必要があるデータ、mode—アルゴリズムモード、iv—初期化ベクトル

<4>

復号化関数 mcrypt_decrypt($cipher,$key,$str_encrypt,$modes,$iv); この関数と暗号化関数のパラメータはほぼ同じです。つまり、データが異なります。データを復号化する必要があるのは、元のデータ $str ではなく、データ $str_encrypt です。

//マニュアルに書く:


コードをコピーする

コードは次のとおりです: //初期化ベクトル iv のサイズを指定します:
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE _ECB);
//初期化ベクトルの作成 :
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
//暗号化パスワード:
$key = "123qwe.019860905061x";
//元のコンテンツ(暗号化されていない):
$text = "My名前はアダム・リーです! ";
echo $text. "
n";
//暗号化されたコンテンツ:
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
echo $crypttext . "n< ;br>";
//暗号化されたコンテンツを復号化します:
$str_decrypt = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);
echo $str_decrypt;


以下は暗号化/復号化リクエストの例です:
コードをコピーします コードは次のとおりです:

$request_params = array(
'controller' => 'todo',
'action ' => '読み取り',
'ユーザー名' => "bl",
'ユーザーパス' => "a1"
);

$private_key = "28e336ac6c9423d946ba02d19c6a2632";

//リクエストの暗号化

$enc_request =base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $private_key, json_encode($request_params), MCRYPT_MODE_ECB));
echo "CRYPT:".$enc_request."
";

//復号リクエスト

$params = json_decode(trim(mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $private_key,base64_decode($enc_request), MCRYPT_MODE_ECB )),true);
echo "ENCRYPT:
";

//print result

var_dump($params);


注: 暗号化関数と復号化関数のパラメータ cipher、key、mode は 1 対 1 に対応している必要があり、そうでない場合はデータを復元できません。

http://www.bkjia.com/PHPjc/328142.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/328142.html技術記事 Mcrypt 拡張ライブラリは、暗号化および復号化機能を実装できます。つまり、平文を暗号化し、暗号文を復元できます。 1. PHP 暗号化拡張ライブラリ Mcrypt のインストールは、標準の PHP インストール プロセスには含まれていません。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。