phpで暗号化

RIJNDAELで暗号化を試してみました。

環境に[libmcrypt]を入れる必要があるので、以下よりソースをDL。

SourceForge

■libmcryptをインストールします。

アーカイブを解凍(/usr/local/src 下にソースを保管)



# tar xvzf libmcrypt-2.5.8.tar.gz


コンパイル-インストールします。



# cd libmcrypt-2.5.8

# ./configure --disable-nls --disable-posix-threads

# make

# make install


Configureオプションは、PHPApacheで実行するために必要みたい。お約束として認識。
これで、libmcryptのインストールは終了。


■次にphpを再コンパイルします。

・その前に念のためphp.iniをバックアップ



# cp /usr/local/lib/php.ini /usr/local/lib/php.ini.backup


・config.status よりConfigureオプションの履歴を参照



# ./configure --with-pear \
# ・
# ・
# ・
# --with-mcrypt

インストールが完了したら、Apacheを再起動。


※念のため、diffでバックアップしたphp.ini.backと比較した方がいいかも。
 また、ZendPlatformを使用している場合は、ZendPlatformも再インストールした方がいいかもです。

して、php_info();で「mcrypt」があることを確認。

mcrypt

mcrypt supportenabled
version >= 2.4.x
Supported ciphers cast-128 gost rijndael-128 twofish arcfour cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes
Supported modes cbc cfb ctr ecb ncfb nofb ofb stream


DirectiveLocal ValueMaster Value
mcrypt.algorithms_dirno valueno value
mcrypt.modes_dirno valueno value


■最後にソースのサンプル


$key = "shinpu_key"; // 共通鍵

$data = "My Name is Shinpu"; // 暗号化する文字列



// 暗号化

$td = mcrypt_module_open (MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, "");

$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);

mcrypt_generic_init ($td, $key, $iv);

$encrypted_data = mcrypt_generic ($td, $data);

mcrypt_generic_end ($td);

var_dump("暗号 = " . $encrypted_data."\n");



// 復号化

$td = mcrypt_module_open (MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, "");

$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);

mcrypt_generic_init ($td, $key, $iv);

$decrypted_data = mdecrypt_generic ($td, $encrypted_data);

mcrypt_generic_end ($td);

var_dump("復号 = " . trim($decrypted_data)."\n");

?>


もっと詳しく知りたい方は、ココとか参照。
「サルベージュ美智子」って誰やねん!?