$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC), MCRYPT_RAND);
で初期ベクトルを生成して、
$value = base64_encode(mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $val, MCRYPT_MODE_CBC, $iv));
で$keyを鍵に$valを暗号化しついでにbase64エンコードして$valueに格納。
$result = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, base64_decode($value), MCRYPT_MODE_CBC, $iv);
で$valueを復号化して$resultに格納。
str_replace(”\0″, “”, $result)すれば元の$valに戻る。
暗号鍵に”hoge”で復号鍵に”hoge”で値が戻るのはいいとして、暗号鍵”hogehoge”の復号鍵”hoge”でも値が戻るのはなんなんだぜ?
よくわからないけど鍵をmd5ハッシュ化して使うようにして解決してみたわけだが。