我成功地讓 PHP 和 Perl 使用 Blowfish 搭配密碼區塊鏈結模式(Cipher Block Chaining)一起運作。Blowfish 金鑰需要至少 8 個字元(即使 Blowfish 最短是 8 位元,Perl 也不喜歡小於 8 個字元的密鑰),最多 56 個字元。初始向量(IV)必須正好是 8 個字元,且填補方式需要是 null,因為 PHP 使用 null 進行填補。此外,PHP 需要 libmcrypt >= 2.4.9 才能與 Perl 相容。
PERL
----
use Crypt::CBC;
$cipher = Crypt::CBC->new( {'key' => 'my secret key',
'cipher'=> 'Blowfish',
'iv' => '12345678',
'regenerate_key' => 0,
'padding' => 'null',
'prepend_iv' => 0
});
$cc = 'my secret text';
$encrypted = $cipher->encrypt($cc);
$decrypted = $cipher->decrypt($encrypted);
print "encrypted : ".$encrypted;
print "<br>";
print "decrypted : ".$decrypted;
PHP
---
$cc = 'my secret text';
$key = 'my secret key';
$iv = '12345678';
$cipher = mcrypt_module_open(MCRYPT_BLOWFISH,'','cbc','');
mcrypt_generic_init($cipher, $key, $iv);
$encrypted = mcrypt_generic($cipher,$cc);
mcrypt_generic_deinit($cipher);
mcrypt_generic_init($cipher, $key, $iv);
$decrypted = mdecrypt_generic($cipher,$encrypted);
mcrypt_generic_deinit($cipher);
echo "encrypted : ".$encrypted;
echo "<br>";
echo "decrypted : ".$decrypted;