重複の可能性:
PHP パスワードの安全なハッシュとソルト
このようなパスワードハッシュをコーディングしている人を見ました。
md5(uniqid(mt_rand('password', 15), true));
それはこれを行うための安全な方法ですか?それはうまくいきましたか?
重複の可能性:
PHP パスワードの安全なハッシュとソルト
このようなパスワードハッシュをコーディングしている人を見ました。
md5(uniqid(mt_rand('password', 15), true));
それはこれを行うための安全な方法ですか?それはうまくいきましたか?
いいえ、安全な方法ではありません。それはクラック可能であり、あなたの例では再現性がありません。ハッシュ自体と一緒にランダムな値を長く保存する必要があります。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
。
安全でないだけでなく、機能しません。
mt_rand
最小値と最大値の 2 つのパラメーターを取ります。
mt_rand('password', 15)
'password'
これは int ( ) に変換され、 ~ の間の0
乱数を返します。0
15
uniqid(mt_rand('password', 15), true)
次に、これにより一意の ID が生成され、前のステップの乱数が先頭に追加されます。次のように計算します。
144ffb22886d58e1.82100749
その文字列は md5 されます。
ご覧のとおり、このコードは 100% 役に立ちません。元のパスワードは変換されて0
永久に失われるため、無意味な乱数をハッシュするだけです。ハッシュを取得したので、それを再度検証する方法はありません。パスワードは変換されるため、ユーザーが何を入力しても問題ありません。
いいえ、このコードは安全ではありません。使用しないでください。
個人的にはphpassライブラリを使っています。安全で、使いやすいです。
正直なところ、パスワードを保存するためのハッシュ アルゴリズムとして md5 を使用することさえありません。bcryptのようなものを使用することを検討します。また、あなたの例がどのように機能するかさえわかりませんが、いずれにせよ、それを保護したい場合は、少なくともmd5、sha1から離れ、他の間違いから学び、ソルトを使用してください。