人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

急ぎですが、

http://www.unitedpongdom.net/~muramoto/blog/mechanical/2007/04/openpne2026.html

こちらに書いてある、

<?php
echo -2861207174 ^ 493813264;
?>

この計算式の結果が、

>この値が、1209765738ならOK、-1653670384 だとバグありです

とかいていますが、
-3085201558

となります。

どうすれば範囲内になりますでしょうか。

お願いします。

OC:CENTOS5
CPU:core2duo
メモリ:2GB

●質問者: chirubo
●カテゴリ:コンピュータ インターネット
✍キーワード:Core2Duo CPU ECHO OC PHP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Mook
●35ポイント

-3085201558 は -1653670384 の 2 倍になりますので、ビットで表現すれば1ビット左にシフトした状態です。

どうしてこのようになるかは不明ですが、プラットフォーム(OS)依存の問題のようですので、とりあえず

chirubo さんの環境は、このバグが発現していると判断できます。

(正常であれば、1209765738 になるはず。)

PHP ^ 演算


これはこれで問題なのですが、これが機能に影響しない範囲での運用であれば、特に気にしなくて良いと

思います(どのようなシステムでもそうですが、バグがあってもそのバグに遭遇しなければ一応運用はできるので)。


もしリンクの先での文字化けが起きていないなら、回避方法もそちらに掲載されていますので、MCrypt を使用しない

設定への整合をとることで、問題は回避できると思います。

◎質問者からの返答

もしかしたらOSが64BITのCENTOSを使っているからなのかもしれないですね(関係ないかもしれませんが;)。

OPENPNEを使う中でどうしてもBlowfish関数を使うようになっていたので、メールアドレスが文字化けしてしまいどうしたものかと考えていました。


2 ● i_kumagoro
●35ポイント

リンク先の検証方法はint型が32ビットの時に問題になる(事がある)動作を検証するもので、結果も32ビット環境におけるものです。64ビット環境では常に-3085201558になるはずです。

ちなみに、検証している動作についてですが、32ビット環境における大多数のPHPでは

(int) 0xFFFFFFFF

が-1になるのに対し、一部のバージョンのPHPでは2147483647(16進数で7FFFFFFF, 32ビットなint型における正数の最大値)になるという違いを調べています。

ざっとPHPのコードCのコードを眺めただけですが、アルゴリズム上は32ビット符号無し整数が使えれば問題のない話であり、そもそもint型が64ビットな環境では影響がない(リンク先で言うところのバグなしのBlowfish)なように思います。

◎質問者からの返答

そうですか。

でしたら文字化けしていたのは、移行元の暗号化との相性によるものということかもしれないですね。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ