サイトを更新しています。 数日間、レイアウトや翻訳に不具合が出ることがあります。ドキュメントは引き続きご利用いただけます。表示が崩れている場合は、後ほど再読み込みしてください。

ホーム Laravel 10.x ハッシュ

ハッシュ

10.x 2026年3月7日

#はじめに

Laravel の Hash ファサード は、ユーザーのパスワードを安全に保存するための Bcrypt と Argon2 のハッシュ化を提供します。もし Laravel アプリケーションのスターターキット を使用している場合、登録と認証にはデフォルトで Bcrypt が使われます。

Bcrypt はパスワードのハッシュ化に適した選択肢です。なぜなら「ワークファクター」を調整できるため、ハッシュ生成にかかる時間をハードウェアの性能向上に合わせて増やせるからです。パスワードのハッシュ化は遅いほど良いです。アルゴリズムがパスワードのハッシュ化に時間をかけるほど、悪意あるユーザーがブルートフォース攻撃に使う可能性のある全ての文字列のハッシュ値をまとめた「レインボーテーブル」を作成するのに時間がかかります。

#設定

アプリケーションのデフォルトのハッシュドライバーは、config/hashing.php 設定ファイルで指定します。現在サポートされているドライバーには、BcryptArgon2(Argon2i と Argon2id のバリアント)があります。

#基本的な使い方

#パスワードのハッシュ化

Hash ファサードの make メソッドを呼び出すことで、パスワードをハッシュ化できます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class PasswordController extends Controller
{
    /**
     * ユーザーのパスワードを更新します。
     */
    public function update(Request $request): RedirectResponse
    {
        // 新しいパスワードの長さを検証...

        $request->user()->fill([
            'password' => Hash::make($request->newPassword)
        ])->save();

        return redirect('/profile');
    }
}

#Bcrypt のワークファクター調整

Bcrypt アルゴリズムを使う場合、make メソッドの rounds オプションでワークファクターを調整できます。ただし、Laravel が管理するデフォルトのワークファクターはほとんどのアプリケーションで十分です。

$hashed = Hash::make('password', [
    'rounds' => 12,
]);

#Argon2 のワークファクター調整

Argon2 アルゴリズムを使う場合、make メソッドの memorytimethreads オプションでワークファクターを調整できます。ただし、Laravel が管理するデフォルト値はほとんどのアプリケーションで十分です。

$hashed = Hash::make('password', [
    'memory' => 1024,
    'time' => 2,
    'threads' => 2,
]);
Примечание

これらのオプションの詳細は、公式 PHP ドキュメントの Argon ハッシュに関するページをご参照ください。

#パスワードがハッシュと一致するかの検証

Hash ファサードの check メソッドを使うと、指定したプレーンテキストの文字列がハッシュと一致するか検証できます。

if (Hash::check('plain-text', $hashedPassword)) {
    // パスワードが一致します...
}

#パスワードの再ハッシュが必要かの判定

Hash ファサードの needsRehash メソッドを使うと、パスワードがハッシュ化された後にワークファクターが変更されたかどうかを判定できます。アプリケーションによっては認証処理の際にこのチェックを行います。

if (Hash::needsRehash($hashed)) {
    $hashed = Hash::make('plain-text');
}