2

クリプトの使用に問題があります。クライアントのサイトを再構築しています。そのため、以前のバージョンから継承されたコードがたくさんあります。サイトの元のデータベースをそのままにしておく必要があるため、コードの変更に注意する必要があります。以前の開発者は、crypt() 関数を使用して、ストレージ用のユーザー パスワードのハッシュを作成していました。私が見ている奇妙な効果は、同じパスワードのわずかな違いがまったく同じハッシュを作成することがあることです。クリプトがどのように機能するかについてはよくわかりませんが、これは起こるべきではないように思えます。例としていくつかのコードを示します。

echo crypt('Colliedog6','wfd')."\n";
echo crypt('Colliedog10','wfd')."\n";

これは、サーバー上で同じハッシュ文字列を返します。以前の開発者が使用したものであり、現在のすべてのパスワードはそのソルト文字列を使用して作成されているため、私はそのソルト文字列を使用しています。すべてのユーザーにパスワードのリセットを強制したい場合を除いて、私は本当にそれを使用する必要があります. これは必ずしも問題外ではありませんが、回避したいと考えています。crypt が上記のようなわずかに異なる 2 つの文字列を取り、同じハッシュを作成するのはなぜですか?

4

2 に答える 2

5

ドキュメントから:

標準の DES ベースの crypt() は、ソルトを出力の最初の 2 文字として返します。また、str の最初の 8 文字のみを使用するため、同じ 8 文字で始まる長い文字列は同じ結果を生成します (同じソルトが使用されている場合)。

于 2012-03-01T19:46:11.727 に答える
1

crypt()8 番目以降の文字を無視するためです。いつものように、PHP のマニュアル/ドキュメントを読むことは良い出発点です。PHP には、そのような落とし穴がたくさんあります:

于 2012-03-01T19:46:58.937 に答える