bcrypt (password_hash / password_verify)

使い方

概要

bcryptによるハッシュ化、またはハッシュ文字列のチェックを行うことができるツールです。

💡
変換処理はサーバー側で行われますが、データは一切保存しておりません。

ハッシュ化の使用例の一つとして、「パスワードの保存」が挙げられます。

大前提として、ハッシュ文字列から元のデータに戻すことはできません。(一方向性)
パスワードをハッシュ化したハッシュ文字列から、元のパスワード文字列を割り出すことはできません。
そのためパスワードをそのまま保存せず、一般的にはハッシュ文字列を保存します。

💡
ハッシュの強度により総当たりで解読される可能性もありますが、厳密な解説は省略します。

同じパスワード文字列からは、同じハッシュ文字列を生成することができます。
つまり、ハッシュ化前の文字列とハッシュ文字列があればチェックすることができます。
(例えばハッシュ文字列が、そのパスワードから生成されたものかどうか)

ハッシュ化(password_hash)

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までとしています。
(大きい値の場合、処理時間が非常にかかるため)

ハッシュチェック(password_verify)

bcryptで生成されたハッシュ文字列にはルールがあり、saltやストレッチング回数が含まれるため、 ハッシュ化前文字列からハッシュ文字列が生成されたかどうか、チェックすることができます。

bcryptのハッシュ文字列のチェックは、以下のようなコードで行います。
$result = password_verify(ハッシュ化前文字列, チェックしたいハッシュ文字列);
💡
本ツールで、bcryptによるハッシュ化やチェックを簡単に行うことができます。
目次