質問: PHPでログイン画面を制作しているのですが、password_hashについて質問があります。 によると > > password_hash関数は、同じパスワードを渡したとしても毎回異なる結果が出てきます。 > > これによって『AさんとBさんが同じハッシュだからよくあるパスワードだろう』といった推測も不可能となります。 > > crypt等の関数では手動実装が必要だったSALTの生成と保存、ストレッチングなどの処理を全てすっ飛ばして、これだけで安全なハッシュが保存されます。 > > 実はpassword_hashはただのcryptのラッパーで、実際には関数内部でそのあたりの処理を行っているだけです。 > > しかし、その部分は表に全く出てこないので見た目がすっきりとし、実装し忘れミスもなくなるため安全性も高まります。 > > なおPASSWORD_BCRYPTはハッシュアルゴリズムのひとつで、CRYPT_BLOWFISHというアルゴリズムでハッシュ化します。 > > > これは > > SALTの生成と保存、ストレッチングなどの処理を全てすっ飛ばして、これだけで安全なハッシュが保存されます。 > > > ソルトも自動的に発行されていると言うことでしょうか?それともソルトは自分自身で発行しデータベースにソルト+パスワード(ハッシュ)で保存するべきなのでしょうか?
回答: 『crypt等の関数では手動実装が必要だったSALTの生成と保存、ストレッチングなどの処理を全てすっ飛ばして』ですので、この文の意味は、crypt等では主導で必要だった処理がpassword_hashなら自動で(おまかせで)やってくれる、という意味です。 そして、この文は正しいです。