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に使いたいわけです。はい。