des 暗号化操作を実行すると、Windows と Linux で得られる結果が異なることがわかります。この操作は createkey プロセスに含まれており、ここからは異なることがわかります。
ネットワーク クエリにより、int オーバーフローが原因であることが明らかになりましたが、これは Windows では正しいことです。 gmp 拡張機能を使用して操作することをお勧めしますが、具体的な使用方法がわかりません。アドバイスをお願いします。
勝利の結果:-176881664リンの結果:-759700962142060544
返信内容:
ネットワーク クエリにより、int オーバーフローが原因であることが明らかになりましたが、これは Windows では正しいことです。 gmp 拡張機能を使用して操作することをお勧めしますが、具体的な使用方法がわかりません。アドバイスをお願いします。
勝利の結果:-176881664
リンの結果:-759700962142060544
@eechen
php の大きな穴に落ちたことおめでとうございます。
指定された数値が整数の範囲を超える場合、浮動小数点として解釈されます。同様に、演算結果が整数の範囲を超える場合も浮動小数点数が返されます。
PHP は符号なし整数をサポートしません。この問題があらゆる種類の奇妙な問題を引き起こすのです。
PHP原文を引用
ただし、この問題は、2 つのシステムの Long 型の長さ (PHP の int 型はカーネル内では両方とも Long 型) が一致していないために発生します (システム内のビット数が異なるため)。
したがって、この問題を解決したい場合は、int を uint に手動で処理する必要があります。
リーリー
このコードがどこから来たのかわかりません。負の数を左右にシフトするコードは CPU によって完成されるため、完全にマシンに依存しており、システムとはほとんど関係がありません。負の数値を左右にシフトする代わりに、他の方法を使用する時期が来ました。
そのため、php7 からは、変位が負の数の場合、エラーが直接報告されます...