6

重複の可能性:
PHP パスワードの安全なハッシュとソルト

このようなパスワードハッシュをコーディングしている人を見ました。

md5(uniqid(mt_rand('password', 15), true));

それはこれを行うための安全な方法ですか?それはうまくいきましたか?

4

3 に答える 3

11

いいえ、安全な方法ではありません。それはクラック可能であり、あなたの例では再現性がありません。ハッシュ自体と一緒にランダムな値を長く保存する必要があります。DB が侵害された場合、ハッシュの総当たり攻撃が非常に簡単になります。

MD5 と SHA1 は、PHP で使用できる最も弱いハッシュ アルゴリズムの 2 つであることを知っておく必要があります。

またはPBKDF2crypt()で関数を使用する方がはるかに優れています。CRYPT_BLOWFISH

アップデート

また、PeeHaa が述べたように、機能しません。mt_rand('password', 15)原因になりますWarning: mt_rand() expects parameter 1 to be long, string given on line X

于 2012-07-09T18:20:51.747 に答える
6

安全でないだけでなく、機能しません。

mt_rand最小値と最大値の 2 つのパラメーターを取ります。

mt_rand('password', 15)

'password'これは int ( ) に変換され、 ~ の間の0乱数を返します。015

uniqid(mt_rand('password', 15), true)

次に、これにより一意の ID が生成され、前のステップの乱数が先頭に追加されます。次のように計算します。

144ffb22886d58e1.82100749

その文字列は md5 されます。

ご覧のとおり、このコードは 100% 役に立ちません。元のパスワードは変換されて0永久に失われるため、無意味な乱数をハッシュするだけです。ハッシュを取得したので、それを再度検証する方法はありません。パスワードは変換されるため、ユーザーが何を入力しても問題ありません。

いいえ、このコードは安全ではありません。使用しないでください。

個人的にはphpassライブラリを使っています。安全で、使いやすいです。

于 2012-07-09T18:29:46.437 に答える
2

正直なところ、パスワードを保存するためのハッシュ アルゴリズムとして md5 を使用することさえありません。bcryptのようなものを使用することを検討します。また、あなたの例がどのように機能するかさえわかりませんが、いずれにせよ、それを保護したい場合は、少なくともmd5、sha1から離れ、他の間違いから学び、ソルトを使用してください。

于 2012-07-09T18:18:42.493 に答える