Zend Server CE 5.1からZend Server CE 5.5へのアップグレード中に、PHPも5.3.5から5.3.8へのアップグレードを取得しました。この移行の後、私が突然動いているzendアプリケーションのログイン機能が壊れました。Zend Server CE 5.5のsha256を使用するPHP crypt()は、提供されたsaltを切り捨てます
それをデバッグしようとすると、crypt()
の実装がPHPマニュアルを反映していないか、または私はそれを誤解してしまいました。私が推測すると、それは後者です。
私は、SHA256を使用して大きな塩の一部として16文字の長さの塩を使用しています。これは、PHPマニュアルの例として使用されています。
$password = //string entered at login
$salt = '$5$rounds=250000$1234abcd5678defg$';
私が入力したパスワード
$hash = crypt($password, $salt);
をハッシュ化した後、私は戻り値として、このような文字列を取得します:
$5$rounds=250000$1234abcd5678$tI.Oiz.YwWjIwT3K.SLU8SwUZ9J0/odBCkbE6t0igeB
私をバッフル何が16文字のsaltということです、これは大きな部分(1234abcd5678defg)の一部ですが、12文字に切り捨てられています。
これは意図したとおりですか? crypt()
関数も以前とは異なる結果を返すように思われます。これはPHPのバージョン間で普通ですか? changelogには、暗号化アルゴリズムの大幅な変更を示唆するものはありません。
5.3.7では、crypt関数に関して大きなバグがありました。数日後に5.3.8で修正されました。たぶんあなたはそれについての投稿を探して、それがあなたの問題に関連しているかどうかを見なければならないでしょうか?また、PHP 5.3.7ではなく5.3.8を確認してください。 –
phpinfo()と、phpまたはphp-cliを実行しているときのターミナルの出力によれば、それはzendに最適化されたPHP 5.3.8です。ビルドの日付は24 ugですので、正しいと思われます。 5.3.7に含まれているように見えるcrypt_sha256.cに対する最新のコミットは、それが塩の切り捨てに問題を修正したことでした。私が持っているのと同じ問題は修正されていたはずだった。私は、適切なバグレポートを入力する前に、PHPで潜在的なバグの適切なチャネルを探しています。 – Patrick
私はこの問題を読んだと信じているのは、暗号は暗号だけでなく、暗号化されたデータを返すということでした。 –