急ぎですが、


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

こちらに書いてある、

<?php
echo -2861207174 ^ 493813264;
?>

この計算式の結果が、

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

とかいていますが、
-3085201558

となります。

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

お願いします。

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

回答の条件
  • 1人2回まで
  • 登録:2007/06/28 00:00:15
  • 終了:2007/07/02 16:44:41

回答(2件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912007/06/28 10:32:48

ポイント35pt

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

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

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

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

PHP ^ 演算


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

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


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

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

id:chirubo

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

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

2007/06/28 12:57:45
id:i_kumagoro No.2

i_kumagoro回答回数170ベストアンサー獲得回数582007/06/28 16:44:27

ポイント35pt

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

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

(int) 0xFFFFFFFF

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

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

id:chirubo

そうですか。

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

ありがとうございます。

2007/06/28 22:17:57

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません