最近ネタはあっても書き込むのがめんどくさいw
久々のネタは暗号化
やっぱり、パスワードとかは暗号化したいもの。
いつもは不可逆な暗号化で暗号化済みのものと比べてますが、
今日は暗号化済みのものから復号化の必要がありました。
まぁそんな本気の暗号化は必要ないのですが、最近PEARに興味が出てきたのでCrypt_Blowfishを使ってみることに。
ネットを見ながら適当にインストールして、サンプルを実行してみる。
<?php
require_once 'Crypt/Blowfish.php';
// 暗号化キー
$key = 'hoge';
//暗号化するデータ
$data = "ぱすわーどとか";
// 暗号化処理
$blowfish = new Crypt_Blowfish($key);
$enc = $blowfish->encrypt($data);
//復号化
$dec = $blowfish->decrypt($enc);
print $dec;//ぱすわーどとか が表示される、はず。
?>
が、復号化が正しく出来ない。
何度か文字列を変えて試したがだめだ。
一応複合化は出来ているんだが、復号化された文字列に暗号化前のデータ以外のバイナリがくっついてる。
「123」を暗号化-復号化すると「123***」となる(*のところは何かのバイナリデータ)
困った
困ったときのGoogle先生にたずねてみる。
見つけましたよウノウラボさん
http://labs.unoh.net/2007/11/php_de_crypt.html
Base64エンコード&デーコードをすればよさげ
さくっと変更
<?php
require_once 'Crypt/Blowfish.php';
// 暗号化キー
$key = 'hoge';
//暗号化するデータ
$data = "ぱすわーどとか";
// 暗号化処理
$blowfish = new Crypt_Blowfish($key);
$enc = $blowfish->encrypt((base64_encode($data)));
//復号化
$dec = $blowfish->decrypt($enc);
print base64_decode($dec);//ぱすわーどとか が表示される、はず。
?>
成功!
しかし、エンコードしないと上手くいかないのは何故だろう。
文字コードの関係だろうか。
[追記]
なにやら後ろにくっついていた謎のバイナリは、暗号化時のバイト数をそろえるために付加されたものらしい。
http://d.hatena.ne.jp/shimooka/20071108/1194449912


ここ間違ってますよ
)が抜けてましたので修正しました。