Bcrypt ハッシュの生成と検証
エンコード処理はすべてブラウザ内で完結します。データは送信されません
bcrypt のパスワードハッシュを生成・検証します —— 今日パスワードを保存するならこれ(あるいは scrypt か Argon2)です。要点は「速く計算する」ことではなく、意図的に遅くすることです:コスト係数を1つ上げるごとに計算量が倍になり、攻撃者の総当たりコストも倍になりますが、正常なログインは数十ミリ秒しか待ちません。ハッシュ文字列にはアルゴリズム識別子・コスト係数・ソルトがすでに含まれているため、検証時に別途保存するものは何もありません —— そのままユーザーテーブルに保存してください。本ツールは `$2y$` プレフィックス(PHP の password_hash が使うもの)で出力し、検証時は `$2a$` と `$2b$` も受け付けます —— 標準入力では3者とも等価です。計算はすべてローカルで行われ、パスワードもハッシュも送信されません。
機能
- 双方向:ハッシュの生成、パスワードとハッシュの照合
- コスト係数は 4〜15 で調整可能。各段階のおおよその所要時間も表示します
- `$2y$` プレフィックスで出力(PHP 互換)。検証時は `$2a$` / `$2b$` も受け付けます
- ハッシュにソルトとパラメータが含まれるため、検証時に別途保存するものはありません
- 毎回異なるソルトを使うので、同じパスワードでも毎回違うハッシュになります
- 長さや形式が違う場合は、「検証失敗」ではなく具体的な理由を示します
使い方
- モードを選びます:生成または検証
- 生成時はコスト係数を設定し、検証時は既存のハッシュを該当欄に貼り付けます
- パスワードを入力欄に貼り付けます
- Ctrl/⌘ + Enter か「実行」を押し、結果をコピーします
よくある質問
- コスト係数はいくつにすべきですか?
- 既定の 10(約 60 ミリ秒)でほとんどの用途に足ります。トレードオフは「サーバーが検証1回に待つ時間」と「攻撃者が1回の試行に計算する時間」で、これらは同じ数値です —— だから際限なく上げることはできません。12 はよく選ばれる値で、15 では検証1回が2秒近くになり、アクセスの多いサイトでは負荷が目に見えます。より強固な保護が必要なら scrypt か Argon2 に切り替えてください。同じ待ち時間でより多くのメモリを要求でき、メモリこそ攻撃者が最も増やしにくい資源です。
- 同じパスワードなのに毎回ハッシュが違うのはなぜですか?
- 毎回ランダムなソルトを生成し、ハッシュ文字列に埋め込むからです(`$2y$10$` の後ろの22文字)。これがレインボーテーブル対策の要点です:ソルトがなければ、攻撃者はよくあるパスワードのハッシュを事前計算した表を作り、一致するレコードをまとめて引けます。レコードごとにランダムなソルトがあれば、同じパスワードでも行ごとにハッシュが変わり、その表は無効になります。つまり毎回結果が違うのは正しい動作で、不具合ではありません。
- 検証が失敗したとき、パスワードの誤りかハッシュの形式不良かを見分けるには?
- 本ツールはこの2つを区別します。形式が不正な場合(`$2y$` がない、60文字でないなど)は「bcrypt ハッシュではない」と明示し、正しい形式を示します。形式が正しく単に一致しない場合は「不一致」と表示します。なお、データベースからハッシュをコピーすると空白や改行が付きがちですが、両端は自動的に除去されます。
- bcrypt の限界は何ですか?
- 知っておくべき点が2つあります。第一に、72バイトで切り捨てられます —— それより長いパスワードの後半は無視されるため、「長いパスワードほど安全」は bcrypt では成り立ちません(本ツールはエラーにしませんが、知っておいてください)。第二に、CPU は消費しますがメモリは消費しないため、GPU による並列解読が比較的割に合います —— まさに scrypt と Argon2 が設計された理由です。一般的なウェブサイトなら bcrypt で十分ですが、より高い水準が求められる場面では Argon2id を使ってください。
関連ツール
Scrypt
エンコードscrypt のパスワードハッシュ(PHC 形式)を生成・検証します。出力は PHC / 16進数 / Base64 から選択でき、メモリが上限を超える場合は明示します。
ハッシュ計算
エンコードMD5・SHA-1・SHA-256・SHA-512 のダイジェストを計算します(旧システム向けの MD4・MD2 も可)。日本語も UTF-8 バイトで計算します。
データベースパスワード
エンコードPostgreSQL の md5、MySQL・MariaDB の mysql_native_password ハッシュを生成し、そのまま使える SQL も表示します。
Base64 変換
エンコードテキストを Base64 に変換し、Base64 からテキストへ戻します。日本語や中国語、emoji も UTF-8 として正しく処理。すべてブラウザ内で完結し、内容は送信しません。
URL エンコード
エンコード日本語や中国語、空白・記号を %XX にエスケープし、復元します。URL 全体とパラメータ値では方式が異なり、間違えるとリンクが開けません。ブラウザ内で処理します。
HTML 実体参照
エンコード< > & と引用符を HTML 実体参照に変換し、文字へ戻します。デコードは1回だけで、&lt; は山括弧ではなく < になります。すべてブラウザ内で処理します。