を機能していません。パスワードが似ていると、同様の結果が生成されるという問題があります。異なるパスワードに対して異なる結果を保証するアルゴリズムはありますか?のcrypt()次のように私は地下室を使用してい
は答えて
塩を追加できます。通常、パスワードを保管している場合は、パスワードを暗号化せずにハッシュする必要があります。 Googleのように検索すると、これについて学ぶことができるたくさんのものがあります。 PHPの陰窩()ページから
:
標準のDESベースのcrypt()は出力の最初の2つの文字として塩を返します。また、strの最初の8文字のみを使用するので、同じ8文字で始まる長い文字列は同じ結果を生成します(同じソルトが使用されている場合)。
また、MD5やSHA256などの異なる暗号化方式を使用することもできます。これは、DESよりもしばしば好ましい方法です。
crypt()
を使用している限り、でない限り、は古いDESベースモード(CRYPT_STD_DES
)を使用します。それを使用する有効な唯一の理由は、そのようなパスワードハッシュを使用するレガシーソフトウェアとの相互運用性のためです。
代わりにCRYPT_BLOWFISH
,CRYPT_SHA256
またはCRYPT_SHA512
モードを使用してください。これらは、任意の長いパスフレーズを受け入れ、長い塩を使用し、複数の反復を介して鍵の強化をサポートする最新のパスワードハッシングアルゴリズムです。
残念ながら、PHP crypt()
インタフェースはややぎこちないです:明示的にしたいアルゴリズムを選択する唯一の方法はあなたにも、実際の塩を自分で生成しなければならないことを意味正しくフォーマット$salt
パラメータを、供給しています。それはおそらく、あなた自身のパスワードハッシュコードを動かすことよりもずっと簡単で安全です。
cryptはランダムな塩を生成し、それを暗号化されたパスワードに保存するので効果的です。したがって、あなたの塩はあなたのパスワードと同じくらい安全です。 –
@Chris:残念ながら、現行のPHP crypt()インターフェースでは、アルゴリズムを選択したい場合は、あなた自身も塩を選択する必要があります。 2番目のパラメータを残しておけば、ランダムな塩が得られますが、システムのデフォルトアルゴリズム(駄目なDESベースのアルゴリズムかもしれません)も得られます。ああ、まあ... PHPは、11時には映画を吸う。 –
出力がraw(20文字)に設定されているsha1()関数はどうでしょうか?それは非常に高速で計算コストが低いので、php.netはそれを推奨しません。 –
最強のハッシュのためにhttp://www.openwall.com/phpass/を試してください – osgx