2011-07-29 7 views

答えて

4

使用hash()とあなたによく合ったハッシュアルゴリズムを選択しますが、これを見つけるだろうcrypt()のマニュアルページで

(MD5よりも強いが、可能なものは、どちらかSHA512にすべての方法を行っていない場合):

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

なぜ同じ結果が得られるかを説明する必要があります。

+0

出力がraw(20文字)に設定されているsha1()関数はどうでしょうか?それは非常に高速で計算コストが低いので、php.netはそれを推奨しません。 –

+0

最強のハッシュのためにhttp://www.openwall.com/phpass/を試してください – osgx

1

塩を追加できます。通常、パスワードを保管している場合は、パスワードを暗号化せずにハッシュする必要があります。 Googleのように検索すると、これについて学ぶことができるたくさんのものがあります。 PHPの陰窩()ページから

1

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

また、MD5やSHA256などの異なる暗号化方式を使用することもできます。これは、DESよりもしばしば好ましい方法です。

2

crypt()を使用している限り、でない限り、は古いDESベースモード(CRYPT_STD_DES)を使用します。それを使用する有効な唯一の理由は、そのようなパスワードハッシュを使用するレガシーソフトウェアとの相互運用性のためです。

代わりにCRYPT_BLOWFISH,CRYPT_SHA256またはCRYPT_SHA512モードを使用してください。これらは、任意の長いパスフレーズを受け入れ、長い塩を使用し、複数の反復を介して鍵の強化をサポートする最新のパスワードハッシングアルゴリズムです。

残念ながら、PHP crypt()インタフェースはややぎこちないです:明示的にしたいアルゴリズムを選択する唯一の方法はあなたにも、実際の塩を自分で生成しなければならないことを意味正しくフォーマット$saltパラメータを、供給しています。それはおそらく、あなた自身のパスワードハッシュコードを動かすことよりもずっと簡単で安全です。

+1

cryptはランダムな塩を生成し、それを暗号化されたパスワードに保存するので効果的です。したがって、あなたの塩はあなたのパスワードと同じくらい安全です。 –

+0

@Chris:残念ながら、現行のPHP crypt()インターフェースでは、アルゴリズムを選択したい場合は、あなた自身も塩を選択する必要があります。 2番目のパラメータを残しておけば、ランダムな塩が得られますが、システムのデフォルトアルゴリズム(駄目なDESベースのアルゴリズムかもしれません)も得られます。ああ、まあ... PHPは、11時には映画を吸う。 –