Mcrypt 関数で暗号化して、復号してみた

ハッシュ化したデータを元に戻したかったので、mcryptを使ってみたお話し。

ハッシュを元に戻す方法が見あたらないので、暗号化と復号で対応してみることに。
以下、動くコード。

echo 'date: '.$data.'<br>';
$base64_data = base64_encode($data);
$td = mcrypt_module_open(MCRYPT_BLOWFISH, '',  MCRYPT_MODE_CBC, '');
// win は「MCRYPT_RAND」を使用する
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
$ks = mcrypt_enc_get_key_size($td);
$key = substr(md5('very secret key'), 0, $ks);
mcrypt_generic_init($td, $key, $iv);
echo '暗号化 : ';
echo $encrypted = mcrypt_generic($td, $base64_data);
mcrypt_generic_deinit($td);
echo '<br>暗号化enc : '.$aaa = base64_encode($encrypted);
echo '<br>暗号化 dec: '.$bbb = base64_decode($aaa);
echo '<br >';
echo 'デコードあってる? : ' . ($encrypted == $bbb ? 'true' : 'false');
echo '<br >';
// 復号処理
mcrypt_generic_init($td, $key, $iv);
echo 'decrypted : ';
echo $decrypted = base64_decode(mdecrypt_generic($td, $encrypted));
echo '<br>元通り? : ' . ($data == $decrypted ? 'true' : 'false');
mcrypt_generic_deinit($td);
mcrypt_module_close($td);

コピペのしまくって、動くことまで確認できました。

しかし、暗号化されるデータをエンコードしてみると、「VqNla0iQ/paVp+QhcaqZYg==」こんなんとかで、あまりよろしくない文字列になっている。

このデータをURLに使いたいわけです。はい。