Windows版とLinux版のPHPの排他論理和の挙動の違い?


PEARのCrypt Browfishライブラリの挙動がローカル環境とサーバ環境で違うのでなんだろうと思って解析してみた。
結果、Windows版とLinux版で排他的論理和の挙動が違っていることが原因と判明。

echo ((-21474836470) ^ (2147483647));

Windows版ver5.2.9
echo ((-21474836470) ^ (2147483647));
結果→ 2147483637

Linux版PHP ver5.1.6(CentOS5付属)
echo ((-21474836470) ^ (2147483647));
結果→ -1

そもそも、ライブラリ内で扱っている初期値での演算で32ビット超えしちゃっている時点で、ライブラリの実装として間違っているような気がするが…。

それはさておき、上記の違いがマシンの64ビットと32ビットという環境の違いが原因かと思ったけど、いくつかの環境で試してみたところそうではないみたい。同じ環境内であれば暗号化、復号化とも問題ないようですが、暗号化データを移行する時は注意が必要ですね。


コメントを残す

メールアドレスが公開されることはありません。