[PHP-dev 1239] NTT製Camelliaのモジュール

hdtank hdtank @ gmail.com
2006年 4月 16日 (日) 01:43:54 JST


清水といいます。

NTT製BSD-VersionのCamellia opensourceを
PHPスクリプトから使用するための拡張モジュールを作ってみました。

環境:
PHP5.1.x用
32ビットCPU


クラス
Camellia

メソッド
object Camellia::__construct(string $rawKey);
string Camellia::encryptBlock(string $string);
string Camellia::decryptBlock(string $encrypted);
string Camellia::encryptString(string $string);
string Camellia::decryptString(string $encrypted);

object Camellia::__construct(string $rawKey);
$rawKeyは128ビット、192ビット、256ビット文字列。
Lengthがそのまま128, 192, 256のいずれかの
CamelliaのrawKeyLengthになり、そのまま対応する
キーテーブルをスクリプト側からはアクセス不可能な
キーテーブルを作成します。

それ以外の長さの文字列が渡された場合は
インスタンスの消滅を行い、NULLが返ります。
例:
$camellia = new Camellia(md5($_SERVER['REMOTE_ADDR']));
rawKeyLength = 256ビット
$camelliaはインスタンス

$camellia = new Camellia("hoge");
$camelliaはNULL

string Camellia::encryptBlock(string $string);
string Camellia::decryptBlock(string $encrypted);
最初の128ビットまたはそれ以下の文字列を
Encrypt、Decryptします。

Camellia opensourceのみ128ビットまでの文字しか
サポートしていないので、試験的&役に立つかどうか微妙ですが
二つほどメソッドを追加しました。

string Camellia::encryptString(string $string);
128ビット以上の文字列をシーケンシャルにEncryptします。

string Camellia::decryptString(string $encrypted);
上記encryptStringで得た文字列をdecryptします。

TODO&Caution
1.64ビットCPUへの対応はしていませんので、32ビットCPUで。
2.Camelliaでエンクリプトされたビットには
コントロールコードが入る場合もありますので
HTTPクライアントなどに送る場合にはbase64などをかけないと
正常に動作しないかもしれません。

ダウンロード
http://www.veax.net/camellia/

法的な制限
https://info.isl.ntt.co.jp/crypt/camellia/source_s.html
があるので、現状では
IP->HOST->.jpをチェックしています。

ビルド
extディレクトリにCamelliaディレクトリをコピー
phpize
./configure --enable-camellia
make
make install


PHP-dev メーリングリストの案内