2023.09.28
【PHP】パスワードのハッシュ化

UnsplashNEOMが撮影した写真

はじめに

Webサービスでパスワードを扱う際、基本的にパスワードはハッシュ化してDBに保存します。

Webサービスに必須の「ハッシュ化」のやり方について、まとめます。

動作確認した環境

OS:Windows11 Home / WSL(Ubuntu20.04)
php:v7.4.33

本題

以下に「パスワードのハッシュ化のやり方」と「パスワードの認証のやり方」をご紹介します。

パスワードのハッシュ化のやり方

ハッシュ化は以下のようにやります。

$password_hashed = password_hash("パスワード", PASSWORD_DEFAULT);
例)$password_hashed = password_hash("testpass", PASSWORD_DEFAULT);

出力してみるとこんな感じになっているはずです。

$2y$10$enS8Vkgn5eE.QGEuxrBzwOylV4ll2xxRl7C6UEyqvdx3XsnZEbyhq

DBに保存する際は、元の文字列ではなくハッシュ化した値を格納します。

パスワードの認証のやり方

パスワードをハッシュ化してDB格納すると、元のパスワードはDBに無いのでサインインの時などに困ります。

サインイン時「ユーザーが入力した値」と「DBに保存された値」を比べる際には文字列どうしの比較ではなく、関数を使ってパスワードが合っているかを確認します。

password_verify("ユーザーが入力した値", "DBに保存された値");
例)password_verify("testpass", $password_hashed);

password_verify()はtrue、falseを返します。