暗号化フィルタ

mcrypt.*mdecrypt.* は、libmcrypt を用いた暗号化・復号化を行います。これらのフィルタは、 mcrypt 暗号化関数 で利用可能な アルゴリズムをサポートしており、mcrypt.ciphername という名前で利用できます。ciphername の部分は、 mcrypt_module_open() に渡すのと同じアルゴリズム名 です。また、以下の 5 つのパラメータが利用できます。

mcrypt フィルタのパラメータ
パラメータ名 必須? 初期値 値の例
mode 任意 cbc cbc, cfb, ecb, nofb, ofb, stream
algorithms_dir 任意 ini_get('mcrypt.algorithms_dir') アルゴリズムモジュールのある場所
modes_dir 任意 ini_get('mcrypt.modes_dir') モードモジュールのある場所
iv 必須 N/A 通常は 8, 16, あるいは 32 バイトのバイナリデータ。暗号の形式に依存する
key 必須 N/A 通常は 8, 16, あるいは 32 バイトのバイナリデータ。暗号の形式に依存する

例1 3DES を用い、ファイルへの出力を暗号化する

<?php
$passphrase 
'My secret';

/* 可読形式のパスフレーズを、再現可能な
 * iv/key のペアに変換する
 */
$iv substr(md5('iv'.$passphrasetrue), 08);
$key substr(md5('pass1'.$passphrasetrue) . 
               
md5('pass2'.$passphrasetrue), 024);
$opts = array('iv'=>$iv'key'=>$key);

$fp fopen('secret-file.enc''wb');
stream_filter_append($fp'mcrypt.tripledes'STREAM_FILTER_WRITE$opts);
fwrite($fp'Secret secret secret data');
fclose($fp);
?>

例2 暗号化されたファイルを読み込む

<?php
$passphrase 
'My secret';

/* 可読形式のパスフレーズを、再現可能な
 * iv/key のペアに変換する
 */
$iv substr(md5('iv'.$passphrasetrue), 08);
$key substr(md5('pass1'.$passphrasetrue) . 
               
md5('pass2'.$passphrasetrue), 024);
$opts = array('iv'=>$iv'key'=>$key);

$fp fopen('secret-file.enc''rb');
stream_filter_append($fp'mdecrypt.tripledes'STREAM_FILTER_READ$opts);
$data rtrim(stream_get_contents($fp));
fclose($fp);

echo 
$data;
?>