暗号化フィルタ

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

表 P-1. mcrypt フィルタのパラメータ

パラメータ名必須?初期値値の例
mode任意cbccbc, 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 バイトのバイナリデータ。暗号の形式に依存する

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

<?php
$passphrase
= 'My secret';

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

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

例 P-11. 暗号化されたファイルを読み込む

<?php
$passphrase
= 'My secret';

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

$fp = fopen('secert-file.enc', 'rb');
stream_filter_append($fp, 'mdecrypt.tripledes', STREAM_FILTER_WRITE, $opts);
$data = rtrim(stream_get_contents($fp));
fclose($fp);

echo
$data;
?>