phpでBlowfishを使うならセキュリティの高いCBCモードを使うこと。

·

Blowfishは復号可能で強力な暗号化をおこなうことができます。
キーは64ビットから448ビットの間で設定することができますが、最も強力な暗号にすることを考慮するとフルサイズのキーにすることをお薦めします。

また、デフォルトの設定(ECB)は暗号化に際して常に同じバイナリを返してしまうことから、頻繁に使用される文字列の場合推測される可能性が高くなります。

セキュリティを高くするためにはCBCというモードを使用し、ランダムな初期ベクトルを生成することで、同じ文字であっても暗号化の度に異なる結果にすることができます。

使い方

使用目的や保存場所、保存方法によって、バイナリ、16進数、Base64エンコードと使い分けるといい。

なお、復号時にデータの最後にゴミが残ることがあるので、その処理を追加してある。

———-

#Blowfishへのパス(例)

require_once('Blowfish.php');

#Blowfish 暗号化キー(例)

define('CBF_KEY','swjTGyigRYgGTAHDbL9g7MARxX-EH_iBtxXsazhK8FSFmyTSkaF2BHFDC6s_4Xii');

#初期化ベクトル(ランダム生成)

$blowfishiv = substr(md5(uniqid(rand(),1)),0,8);

#CBCモードで使用

$crypt = Crypt_Blowfish::factory('cbc',CBF_KEY,$iv);

———-

暗号化

#バイナリ

$crypted = $crypt->encrypt($str);

#16進数の場合

$crypted = bin2hex($crypt->encrypt($str));

#Base64の場合

$crypted = base64_encode($crypt->encrypt($str));

———-

復号

#バイナリ

$str = $crypt->decrypt($crypted);

#16進数の場合

$str = rtrim($crypt->decrypt(pack( "H*",$crypted)));

#Base64の場合

$decrypt = $crypt->decrypt(base64_decode($crypted));
$hex = bin2hex($decrypt);
$hex = ereg_replace("00", "", $hex);
$str = pack("H*", $hex);