Crypt_Blowfish 从 pear 到 phpseclib 的向后兼容性

Crypt_Blowfish backward compatibility from pear to phpseclib

我想将我的系统从 pear/Crypt/Blowfish 迁移到 phpseclib/Crypt/Blowfish 库。

我需要完全向后兼容。那么,这两个库之间有什么区别?

我发现 in this link "PEAR's Crypt_Blowfish uses ECB by default, and phpseclib's uses CBC"。

所以我将 phpseclib 配置为与 ECB 一起工作,但两个库之间仍然存在差异。哪一个?

我终于找到了解决办法:

默认情况下,pear crypt 包使用 chr(0) 来填充长度不是 8(块大小)倍数的字符串。但是 phpseclib 使用整数代替。

解决方法如下:

$crypt = new Crypt_Blowfish(CRYPT_MODE_ECB);
$crypt->setKey('mysecretkey');
$crypt->disablePadding();
// You must padding your input here with chr(0),
// to put your input length to a multiple of 8
$block_size = 8;
$pad = $block_size - (strlen($text) % $block_size);
$text = str_pad($text, strlen($text) + $pad, chr(0));
$encrypted = $crypt->encrypt($text);