ホームページ > バックエンド開発 > PHPチュートリアル > 暗号化および復号化アルゴリズム - php コード: 62837 << -16 が Windows と Linux で同じ結果を得るにはどうすればよいですか?

暗号化および復号化アルゴリズム - php コード: 62837 << -16 が Windows と Linux で同じ結果を得るにはどうすればよいですか?

WBOY
リリース: 2016-07-06 13:52:46
オリジナル
1009 人が閲覧しました

des 暗号化操作を実行すると、Windows と Linux で得られる結果が異なることがわかります。この操作は createkey プロセスに含まれており、ここからは異なることがわかります。

ネットワーク クエリにより、int オーバーフローが原因であることが明らかになりましたが、これは Windows では正しいことです。 gmp 拡張機能を使用して操作することをお勧めしますが、具体的な使用方法がわかりません。アドバイスをお願いします。

勝利の結果:-176881664

リンの結果:-759700962142060544

@eechen

返信内容:

des 暗号化操作を実行すると、Windows と Linux で得られる結果が異なることがわかります。この操作は createkey プロセスに含まれており、ここからは異なることがわかります。

ネットワーク クエリにより、int オーバーフローが原因であることが明らかになりましたが、これは Windows では正しいことです。 gmp 拡張機能を使用して操作することをお勧めしますが、具体的な使用方法がわかりません。アドバイスをお願いします。

勝利の結果:-176881664

リンの結果:-759700962142060544


@eechen

php の大きな穴に落ちたことおめでとうございます。

指定された数値が整数の範囲を超える場合、浮動小数点として解釈されます。同様に、演算結果が整数の範囲を超える場合も浮動小数点数が返されます。

この問題があらゆる種類の奇妙な問題を引き起こすのです。

PHP は符号なし整数をサポートしません。

PHP原文を引用

ただし、この問題は、2 つのシステムの Long 型の長さ (PHP の int 型はカーネル内では両方とも Long 型) が一致していないために発生します (システム内のビット数が異なるため)。

したがって、この問題を解決したい場合は、int を uint に手動で処理する必要があります。

リーリー

ところで、最新のphp7ではこの問題は修正されていますが、phpでは負の数をシフトすることはできません。

このコードがどこから来たのかわかりません。負の数を左右にシフトするコードは CPU によって完成されるため、完全にマシンに依存しており、システムとはほとんど関係がありません。負の数値を左右にシフトする代わりに、他の方法を使用する時期が来ました。

そのため、php7 からは、変位が負の数の場合、エラーが直接報告されます...

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート