- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpのパスワードのハッシュ化について)
phpのパスワードのハッシュ化について
このQ&Aのポイント
- phpで会員サイトの作成を学習しています。入力フォームにユーザーの情報を入力してもらい、データベースに格納する際、パスワードをハッシュ化する必要があります。
- PHP5.5.15を使用している場合、password_hash関数を使用することが推奨されています。
- また、ハッシュ化されたパスワードの認証は、ログイン画面でユーザーが入力したパスワードをハッシュ化して、データベースに保存されたハッシュ化されたパスワードと比較することで行われます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#244856
回答No.1
>> password_hashを使用するのが今のところ最善なのでしょうか? はい。 >> ユーザーが入力したパスワードをハッシュ化して >> 該当レコードのハッシュ化されて保存されたパスワードと >> 同じであれば認証が成功するという認識で正しいでしょうか? はい。但し、もう一度password_hash関数にかけてしまうと検証に失敗します。 md5やsha1といったものと異なり、この関数で生成されるものには「初期化ベクトル」というものが絡みます。初期化ベクトルは毎回ランダムに設定されるので、生成されるハッシュも異なります。これにより、レインボーテーブル( http://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%A4%E3%83%B3%E3%83%9C%E3%83%BC%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB ) に対して強力な対策が実現出来ているわけです。 ただこれだと「どうやって認証すればいいの?」という疑問が沸いてくると思います。心配無用、初期化ベクトルはちゃんと生成したハッシュの一部に含まれています(「$」区切り)。「初期化ベクトルってバレていいの?」という疑問もあると思いますが、不可逆なハッシュアルゴリズムを用いているので、特に問題はありません。 「初期化ベクトルを記録されたものに固定してハッシュ化→比較」という処理はpassword_verify関数が行ってくれるので、これを利用しましょう。
お礼
非常にわかりやすくご説明頂き、ありがとうございます! 無事、パスワードのハッシュ化とハッシュ化したパスワードの認証ができました!