bcryptによるハッシュ化、またはハッシュ文字列のチェックを行うことができるツールです。
ハッシュ化の使用例の一つとして、「パスワードの保存」が挙げられます。
大前提として、ハッシュ文字列から元のデータに戻すことはできません。(一方向性)
パスワードをハッシュ化したハッシュ文字列から、元のパスワード文字列を割り出すことはできません。
そのためパスワードをそのまま保存せず、一般的にはハッシュ文字列を保存します。
同じパスワード文字列からは、同じハッシュ文字列を生成することができます。
つまり、ハッシュ化前の文字列とハッシュ文字列があればチェックすることができます。
(例えばハッシュ文字列が、そのパスワードから生成されたものかどうか)
$hash = password_hash(ハッシュ化したい文字列, PASSWORD_BCRYPT, [
'cost' => コスト,
]);
bcryptで生成されたハッシュ文字列は、salt(ランダム文字列)が含まれるため、毎回異なる文字列が生成されます。
$2y$10$Z0kGQ04hCto9dnMu.GyzWOWNQmoKyeF5PXH.zsrf/I.yNJRcbdN86
password_hash関数のcostの初期値は10です。
password_hash関数自体は4~31の範囲を指定できますが、サーバー負荷を考慮し4~15までとしています。
(大きい値の場合、処理時間が非常にかかるため)
bcryptで生成されたハッシュ文字列にはルールがあり、saltやストレッチング回数が含まれるため、 ハッシュ化前文字列からハッシュ文字列が生成されたかどうか、チェックすることができます。
bcryptのハッシュ文字列のチェックは、以下のようなコードで行います。$result = password_verify(ハッシュ化前文字列, チェックしたいハッシュ文字列);