Pages

2010年3月11日木曜日

phpでの復号可能な暗号化

ちょっと悩んだので、メモ。

参考URLは
http://blog.spicebox.jp/labs/2009/01/php.html
http://labs.unoh.net/2007/11/php_de_crypt.html

暗号化

// 暗号化するデータ
$base64_data = base64_encode($data);

// 暗号化キー
$key = '0123456789pugya-';

// 事前処理
$resource = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, '');

// key設定
$ks = mcrypt_enc_get_key_size($resource);
$key = substr(md5($key), 0, $ks);

// 初期化ベクトル
$ivsize = mcrypt_enc_get_iv_size($resource);
$iv = substr(md5($key), 0, $ivsize);

// 暗号化処理
mcrypt_generic_init($resource, $key, $iv);
$encrypted_data = mcrypt_generic($resource, $base64_data);
mcrypt_generic_deinit($resource);

// モジュールを閉じる
mcrypt_module_close($resource);

// 暗号化データ
echo base64_encode($encrypted_data);
 

復号化

// 復号化するデータ
$encrypted_data = base64_decode($request_data);

// 暗号化キー
$key = '0123456789pugya-';

// 事前処理
$resource = mcrypt_module_open(MCRYPT_BLOWFISH, '',  MCRYPT_MODE_CBC, '');

// key設定
$ks = mcrypt_enc_get_key_size($resource);
$key = substr(md5($key), 0, $ks);

// 初期化ベクトル
$ivsize = mcrypt_enc_get_iv_size($resource);
$iv = substr(md5($key), 0, $ivsize);

// 復号処理
mcrypt_generic_init($resource, $key, $iv);
$base64_decrypted_data = mdecrypt_generic($resource, $encrypted_data);
mcrypt_generic_deinit($resource);

// モジュールを閉じる
mcrypt_module_close($resource);

// 複合化データ
echo base64_decode($base64_decrypted_data);













0 コメント: