2016-09-22 20 views
3

PHP 5.2.9(32ビットLinux OS)で対称鍵暗号化(blowfish)を使用して文字列を暗号化しようとしています。 (内部モードで実行されている)phpseclib 1.0.3、私はそれは非常に簡単です使用しているサンプルコード:32ビットLinux OSでPHP 5.2.9でBlowfish対称鍵の暗号化が正しく行われない

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 OSです)。

ad7145c675b1c914bbfe379dc7293bf3 

PHP 5.2.9の出力が間違っているとします。これの原因は何でしょうか?すべての手がかりは?

+0

、[OK]を問題を修正しました: 'ます$ this-> bctx [ 'P '] [] = $ this-> parray [$ i]^$ data'です。 明らかに、このXORビット演算子(^)は、値とOSの種類(32Bitまたは64Bit)によって異なる結果を返します。 たとえば、次のコード: '$ a = 2242054355; $ b = 1701195825; $結果= $ a^$ b; echo $ result; ' 32ビットシステムで-523945758を返します.64ビットシステムでは3771021538を返します。だから、問題はPHPのバージョンではなく、OSのタイプに関連しているように見えます(後でタイトルを編集します)。 – Romualdo

+0

https://github.com/phpseclib/phpseclib/issues/1038 – neubert

+0

も参照してください。うわーは魅力的です。ありがとうございました – Learner

答えて

2

32ビットLinux pre-PHP 5.3でのfloatからintへの変換に関する問題でした。 phpseclibの開発者は、 "クリプト/ Blowfish.php" のライン439上のこの命令に問題があるように見える、バージョン1.0.4 & 2.0.4

関連する問題