Я пытаюсь зашифровать строку с использованием симметричного ключа (blowfish) с помощью PHP 5.2.9 (на 32-разрядной ОС Linux) и с помощью phpseclib 1.0.3 (работает во внутреннем режиме), пример кода, который я использую, это довольно просто:
include('Crypt/Blowfish.php');
$cipher = new Crypt_Blowfish();
$data = 'abcdefghijk';
$cipher->setKey('abcdef0123456789abcdefghi9876543');
echo bin2hex($cipher->encrypt($data));
сгенерированный вывод (PHP 5.2.9 — 32-битная ОС Linux):
0e1651fc54dd530757fc1711b696dac5
Но я пробовал тот же код с другими серверами (PHP 7.07, PHP 5.3.3, PHP 5.0.4), и ВСЕ они генерируют это (все они являются 64-битной ОС Linux):
ad7145c675b1c914bbfe379dc7293bf3
Я полагаю, что вывод PHP 5.2.9 неверен. Что может быть причиной этого? Есть какие-нибудь подсказки?
Это была проблема, связанная с преобразованиями типа float в int в 32-битной Linux pre-PHP 5.3. Разработчики phpseclib исправили проблему в версии 1.0.4 & 2.0.4
Других решений пока нет …