ここで示す関数は、mcrypt を 使用して動作します。
この関数は、CBC, OFB, CFB ,ECB 暗号モードの DES,TripleDES,Blowfish (デフォルト),3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 ,GOST の ような広範なブロックアルゴリズムをサポートする mcrypt ライブラリへのインターフェースです。 加えて、"フリーではない" を思われるRC6 および IDEA もサポートします。
これを使用するには、ここ から libmcrypt-x.x.tar.gz をダウンロードし、含まれているインストール用の 指示に従って下さい。この拡張機能を利用可能にするためには、 PHP を --with-mcrypt パラメータを 付けてコンパイルする必要があります。
mcrypt は、上に示した暗号を用いて暗号化および複合化を 行うことが可能です。4つの重要な mcrypt コマンド (mcrypt_cfb, mcrypt_cbc, mcrypt_ecb, mcrypt_ofb) は、 MCRYPT_ENCRYPT および MCRYPT_DECRYPT という 2つのモードの両方で実行可能です。
例 1. 入力値を ECB モードの TripleDES で暗号化する
<?php $key = "this is a very secret key"; $input = "Let us meet at 9 o'clock at the secret place."; $encrypted_data = mcrypt_ecb(MCRYPT_TripleDES, $key, $input, MCRYPT_ENCRYPT); ?>
mcrypt は、4つの暗号化モード (CBC, OFB, CFB, ECB) で実行可能です。 ここで、これらの各モードの通常の使用法の概要を示します。 詳細なリファレンスおよび議論に関しては、 Applied Cryptography by Schneier (ISBN 0-471-11709-9) を参照下さい。
ECB (electronic codebook) は、他のキーを暗号化するといった ランダムデータに適しています。 出力データは短くランダムであるという ECB の短所は、 都合の良い逆の効果を持っています。
CBC (cipher block chaining) は、特に、 ECB よりも著しく高いセキュリティで ファイルを暗号化する用途に適しています。
CFB (cipher feedback) は、1バイト毎に暗号化する必要がある バイトストリームを暗号化する際に最も適したモードです。
OFB (output feedback) は CFB と互換性がありますが、 エラーの伝播が許容されないアプリケーションに 使用することが可能です。
PHP は、現在ビットストリームの暗号化/複合化をサポートしていません。 現在のところ、PHP は文字列の処理のみをサポートしています。
サポートされる暗号の完全なリストについては、mcrypt.h の define を 参照下さい。 一般に、特定の暗号は、PHP で MCRYPT_暗号名 とすることによりアクセス 可能です。
以下に現在 mcrypt 拡張機能においてサポートされている暗号の簡単なリストを 示します。mcrypt がサポートする暗号がこのリストにのっていない場合、 このドキュメントが古いと仮定して下さい。
MCRYPT_BLOWFISH
MCRYPT_DES
MCRYPT_TripleDES
MCRYPT_ThreeWAY
MCRYPT_GOST
MCRYPT_CRYPT
MCRYPT_DES_COMPAT
MCRYPT_SAFER64
MCRYPT_SAFER128
MCRYPT_CAST128
MCRYPT_TEAN
MCRYPT_RC2
MCRYPT_TWOFISH (古い mcrypt 2.x バージョン用)
MCRYPT_TWOFISH128 (TWOFISHxxx は最近の 2.x バージョンで利用可能)
MCRYPT_TWOFISH192
MCRYPT_TWOFISH256
MCRYPT_RC6
MCRYPT_IDEA
CFB および OFBモードではそれぞれの暗号関数に初期化ベクトル(IV) を与える 必要があり、CBCモードではIVを指定することが可能です。 IV は、ユニークである必要があり、暗号化/複合化の際に同じである 必要があります。 暗号化されて保存されたデータの場合、関数の出力を (ファイル名の MD5 キーのように) 保存されたデータの位置を表す インデックスとして使用することができます。 もしくは、暗号化されたデータと共にIV を渡すことができます。 (このトピックに関する議論については、Applied Cryptography by Schneier (ISBN 0-471-11709-9) の 9.3 章 を参照下さい)