我试图使用PHP 5.2.9(在32位Linux操作系统上)使用对称密钥加密(blowfish)来加密字符串,并使用phpseclib 1.0.3(在内部模式下运行),我使用它的示例代码是相当简单:错误的Blowfish在32位Linux操作系统上使用PHP 5.2.9进行对称密钥加密
include('Crypt/Blowfish.php');
$cipher = new Crypt_Blowfish();
$data = 'abcdefghijk';
$cipher->setKey('abcdefabcdefghi9876543');
echo bin2hex($cipher->encrypt($data));
生成的输出是(PHP 5.2.9 - 32位Linux OS):
0e1651fc54dd530757fc1711b696dac5
但我已经尝试了与其他服务器(PHP 7.07,PHP 5.3.3,PHP 5.0.4)相同的代码,并且它们都生成了这些代码(所有这些代码都是64位Linux操作系统):
ad7145c675b1c914bbfe379dc7293bf3
我想PHP 5.2.9输出是错误的。这可能是什么原因?任何线索?
2016-09-22
Romualdo
+0
好,看上去像个“地穴/ Blowfish.php” 439行该指令的一个问题: '$这个 - > bctx ['P '] [] = $ this-> parray [$ i]^$ data'。 显然这个XOR按位运算符(^)根据值和OS的类型(32Bit或64Bit)返回不同的结果。 例如,此代码: '$ a = 2242054355; $ b = 1701195825; $ result = $ a^$ b; echo $ result;' 在32位系统上返回-523945758或在64位系统上返回3771021538。所以看起来问题与操作系统的类型有关,而不是PHP的版本(我稍后会编辑标题)。 –
+0
另请参阅https://github.com/phpseclib/phpseclib/issues/1038 –
+0
哇,它像一个魅力。谢谢 –