Bcrypt ハッシュ生成・検証ツール
bcrypt パスワードハッシュをオンラインで生成・検証。コスト調整、$2b$/$2a$/$2y$ プレフィックス対応。100% ブラウザ内で処理し、パスワードは一切送信されません。
Bcrypt とは?
Bcrypt は、パスワードを安全に保存するために特別に設計されたパスワードハッシュ関数です。パスワードを平文で保持する代わりに、サーバーは一方向の bcrypt ハッシュを保存します。ユーザーがログインすると、サーバーは送信されたパスワードを同じ方法でハッシュ化し、2 つのハッシュが一致することを確認します。Bcrypt は Blowfish 暗号の上に構築され、1999 年に Niels Provos と David Mazières によって設計されました。SHA-256 のような汎用ハッシュとは一線を画す、意図的な特徴が 1 つあります。それは意図的に遅いことであり、ハードウェアが高速になるにつれて調整可能なコスト係数で時間をかけてさらに遅くできます。
bcrypt ハッシュは、自己記述的な 1 つの 60 文字の文字列です。例えば $2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq です。これは 4 つの部分を含みます。バージョン($2b$)、コスト(12、対数的なワークファクター)、22 文字の Base64 ソルト、31 文字の Base64 ダイジェストです。ソルトはランダムでハッシュに埋め込まれているため、同じパスワードでも毎回異なるハッシュが生成されます。これによりレインボーテーブルを無力化し、2 人のユーザーが同じパスワードを選んだ事実を隠します。検証は保存されたハッシュからソルトとコストを読み戻して候補を再ハッシュ化するので、bcrypt がパスワードを復元するためにハッシュを逆変換する必要は(そしてできることも)ありません。
本ツールはバンドルされた bcrypt 実装を使って完全にブラウザ内で動作します。パスワードやハッシュがアップロードされることは一切ありません。選んだコストとプレフィックスでハッシュを生成したり、既存のハッシュに対してパスワードを検証したり、ハッシュの構造を読んだりするのに使えます。他のセキュリティツールとも自然に組み合わせられます。htpasswd 生成ツール(bcrypt エントリを直接出力できます)で HTTP Basic 認証によりディレクトリを保護し、ランダムパスワード生成ツールでハッシュ化する強力なパスワードを作り、遅いパスワードハッシュではなく高速な汎用チェックサムが必要なときはSHA-256 生成ツールを使いましょう。どのアルゴリズムでパスワードを保存するか決めかねている場合は、bcrypt と Argon2、scrypt の比較で選択肢を比較してください。
// Node.js — bcryptjs / bcrypt (emits $2b$)
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash('correct horse battery staple', 12);
// -> $2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
const ok = await bcrypt.compare('correct horse battery staple', hash); // true
# Python — bcrypt
import bcrypt
hashed = bcrypt.hashpw(b'correct horse battery staple', bcrypt.gensalt(12))
bcrypt.checkpw(b'correct horse battery staple', hashed) # True
# PHP — password_hash (emits $2y$)
$hash = password_hash('correct horse battery staple', PASSWORD_BCRYPT, ['cost' => 12]);
password_verify('correct horse battery staple', $hash); // true
# Apache htpasswd CLI — bcrypt entry to stdout (-B bcrypt, -b inline, -n stdout)
htpasswd -Bbn admin 'correct horse battery staple'
# -> admin:$2y$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq 主な機能
Bcrypt ハッシュを生成
任意のパスワードから、新しいランダムソルト付きの標準的な 60 文字の bcrypt ハッシュを生成します。クリックするたびに異なる有効なハッシュが得られ、まさに実際のパスワードストアと同じ挙動です。
調整可能なコスト係数
ワークファクターを 4〜15 で調整します(12 が現代の既定値)。各ステップで計算時間がおよそ倍になるのを体感し、強力でありながらログインに十分速いコストを選べます。
バージョンプレフィックスを選択
$2b$(現在の bcryptjs 標準)、$2y$(PHP / Apache htpasswd)、$2a$(最初のもの)を出力します。いずれもライブラリをまたいだ検証で互換性があります。
ハッシュに対してパスワードを検証
保存されたハッシュと候補のパスワードを貼り付けると、復号せずに埋め込まれたソルトとコストで再ハッシュ化し、一致するかどうかを即座に確認します。失敗したログインのデバッグに最適です。
ハッシュの構造の内訳
任意の bcrypt ハッシュをバージョン・コスト・ソルト・ダイジェストに分解して表示し、$2b$12$... 文字列の構造が一目で明らかになります。
100% クライアントサイド
ハッシュ化と検証はすべてブラウザ内でローカルに行われます。パスワードやハッシュがサーバーに送られることはないので、実際の認証情報をプライベートに扱えます。
Bcrypt 生成ツールの例
bcrypt ハッシュ(コスト 12、$2b$)
password: correct horse battery staple cost: 12 prefix: $2b$
$2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
コスト 12、$2b$ プレフィックスの bcrypt ハッシュです。ソルトはランダムなので、同じパスワードでも毎回異なるハッシュが生成されますが、いずれも元のパスワードに対して正しく検証できます。
ハッシュに対してパスワードを検証
password: correct horse battery staple hash: $2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
✓ 一致 — このハッシュに対してパスワードは正しいです
検証はハッシュを復号するわけではありません。bcrypt は保存されたハッシュに埋め込まれたソルトとコストを使って候補のパスワードを再ハッシュ化し、結果を比較します。一致すればパスワードが正しいということです。
ハッシュの構造の内訳
$2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
version: $2b$ · cost: 12 · salt: dUSFKqT1FCMYZ6hcQfsxuO · digest: NizEqcX8IGK8snfVSowP5Uu.TDJoPUq
すべての bcrypt ハッシュは自己記述的です。バージョンタグ、2 桁のコスト、22 文字の Base64 ソルト、31 文字の Base64 ダイジェストが、1 つの 60 文字の文字列にまとまっています。本ツールはこれらを分解して一目で読めるようにします。
Bcrypt 生成ツールの使い方
- 1
パスワードを入力しコストを選ぶ
「生成」タブで、パスワードを入力するか「ランダムパスワード」をクリックします。コスト係数(4〜15、12 が現代の既定値)と、$2b$・$2a$・$2y$ のバージョンプレフィックスをスタックに合わせて選びます。
- 2
ハッシュを生成する
bcrypt ハッシュは新しいランダムソルトでローカルに計算され、1 つの 60 文字の $2b$12$... 文字列として表示されます。「コピー」をクリックして取り出すか、ソルト付きの新しいハッシュのために再生成します。
- 3
構造を読むか検証する
構造パネルはハッシュをバージョン・コスト・ソルト・ダイジェストに分解します。「検証」タブに切り替え、保存されたハッシュとパスワードを貼り付ければ、一致するかどうかを即座に確認できます。
Common Errors
ハッシュを復号しようとする
Bcrypt は一方向で復号はありません。パスワードをチェックするには、ダイジェストを逆変換しようとするのではなく、ハッシュに対して検証してください。
bcrypt.decrypt(hash) // no such operation
bcrypt.compare(password, hash) // returns true / false
コストを低く設定しすぎる
4 や 6 のような低いコストはほぼ瞬時にハッシュ化しますが、攻撃者が漏洩したハッシュを高速に総当たりすることも許してしまいます。基準として 12 を使ってください。
cost: 4 // far too fast, weak against brute force
cost: 12 // modern default, resists brute force
同じハッシュが 2 回得られると期待する
ソルトがランダムなので、同じパスワードを再びハッシュ化すると異なる文字列になります。2 つのハッシュのバイト一致で確認するのではなく、検証で比較してください。
hash(pw) === storedHash // fails — different salts
bcrypt.compare(pw, storedHash) // correct check
よくある使用例
- データベースにパスワードハッシュを初期投入
- 管理者またはテスト用アカウントの bcrypt ハッシュを生成して users テーブルに直接挿入し、完全なサインアップフローを先に組まなくてもログインできるようにします。
- 失敗するログインをデバッグ
- 既知の正しいパスワードを保存されたハッシュに対して検証し、ハッシュ自体が正しいかどうかを確認することで、認証コードからバグを切り分けます。
- 適切なコスト係数を選ぶ
- 自分のハードウェアで複数のコストレベルで生成し、それぞれにかかる時間を体感してから、実際のログインを遅くせずに総当たりに耐えるワークファクターを選びます。
- htpasswd / Basic 認証エントリを作成
- Apache、Docker Registry、Caddy の認証情報用に $2y$ bcrypt ハッシュを生成し、HTTP Basic 認証の user:hash 行に貼り付けます。
- テストフィクスチャを作成
- 実際の認証サーバーを立てずに、ログインやパスワードリセットフローの統合テストを初期化するための bcrypt ハッシュを生成します。
- 見つけたハッシュを監査
- 設定ファイルやダンプ内の bcrypt 文字列の構造を読んでコスト係数を確認し、期待するパスワードに対して検証して一致を確かめます。
技術的な詳細
- Blowfish ベース、適応的なコスト
- Bcrypt は Blowfish 暗号の高コストな鍵セットアップからハッシュを導出し、それを 2^cost 回繰り返します。コストを 1 上げると処理量が倍になり、ハードウェアの向上に伴っても関数を総当たりに対して遅く保ちます。
- 128 ビットのランダムソルト
- 各ハッシュは 16 バイト(128 ビット)のランダムソルトを埋め込み、コストの後に 22 文字として Base64 エンコードします。ソルトにより各ハッシュが一意になるため、同一のパスワードがダイジェストを共有することはなく、レインボーテーブルは適用できません。
- 自己記述的な 60 文字フォーマット
- 出力は $version$cost$salt+digest であり、検証に必要なすべてを含む固定 60 文字の文字列です。別途ソルト列やパラメータストアは不要です。
- 72 バイトのパスワード上限
- Bcrypt はパスワードの先頭 72 バイトのみをハッシュ化し、それを超える部分は黙って無視されます。非常に長いパスフレーズには、bcrypt の前に(例えば SHA-256 で)事前ハッシュ化するのが一般的な緩和策です。
- 復号ではなく検証
- Bcrypt は一方向です。検証は保存されたハッシュから解析したソルトとコストを使って候補のパスワードを再ハッシュ化し、ダイジェストを一定時間で比較します。平文を復元する操作は存在しません。
- 正直な注記と注意事項
- ハッシュはローカルに計算され、稼働中のシステムに対して照合されることはありません。コピーしたハッシュや入力したパスワードはクリップボードとブラウザのメモリに残ります。秘密として扱い、本番に貼り付けた後はクリップボードをクリアしてください。
ベストプラクティス
- コスト 12 以上を使う
- コスト 12 は現代の基準です。ログインの遅延が許容範囲に収まる限り、機密性のあるシステムでは 14 に向けて上げます。定期的に再評価してください。5 年前に十分遅かったものは、今日では安価に攻撃できます。
- 平文を保存・記録しない
- 元のパスワードではなく bcrypt ハッシュのみを保存し、パスワードをログやエラーメッセージから排除してください。平文がハッシュと一緒に漏洩すると、bcrypt の価値はすべて失われます。
- ソルトは bcrypt に任せる
- Bcrypt は安全なランダムソルトを生成して埋め込んでくれます。独自の固定ソルトを与えたり再利用したりしないでください。ハッシュごとのランダムソルトこそがレインボーテーブルを無力化するものです。
- 72 バイト上限に注意
- 長いパスフレーズを受け付ける場合、bcrypt は 72 バイトを超えるバイトを無視することを忘れないでください。非常に長い入力を完全に扱う必要があるなら、SHA-256 での事前ハッシュ化を検討するか、Argon2id を評価してください。
Bcrypt 生成ツールの FAQ
オンラインの bcrypt 生成ツールは安全に使えますか?
オンラインで bcrypt ハッシュを生成するにはどうすればよいですか?
$2b$、PHP と Apache には $2y$、最初の識別子には $2a$ です。bcrypt ハッシュは新しいランダムソルトでブラウザ内で即座に計算され、ワンクリックでコピーできる 1 つの 60 文字の $2b$12$... 文字列として表示されます。何もアップロードされません。パスワードもハッシュもお使いのデバイスから離れることはありません。いつでも再生成すれば、同じパスワードに対する別の有効なハッシュが得られます。各ハッシュは異なるランダムソルトを持つからです。 bcrypt ハッシュは復号したり元に戻したりできますか?
どのコスト係数(ワークファクター)を使うべきですか?
$2a$、$2b$、$2y$ の違いは何ですか?
$2a$ は最初に広く使われた識別子、$2b$ は bcryptjs ライブラリやほとんどの現代的な実装が出力する修正済みの現行バージョン、$2y$ は PHP と Apache の htpasswd が使う識別子です。検証の点では互換性があります。ここで生成したハッシュはどのプレフィックスでもライブラリをまたいで正しく検証されます。すべて同じ中核の関数を実行しているからです。バイト単位の互換性が必要な場合は、お使いのスタックが期待するプレフィックスを選んでください。 bcrypt ハッシュに対してパスワードを検証するにはどうすればよいですか?
$2b$12$... 文字列)と候補のパスワードを貼り付けると、ツールが一致するかどうかを即座に教えてくれます。仕組みとしては、ハッシュに埋め込まれたソルトとコストを取り出し、まさにそのパラメータで候補のパスワードを再ハッシュ化し、新しいダイジェストを保存されたものと比較します。復号は一切関与しません。これはログインシステムがパスワードをチェックする方法そのものです。平文を復元することはなく、送信されたパスワードを再ハッシュ化すると保存されたハッシュが再現されることを確認するだけです。 bcrypt と Argon2、scrypt — どれを使うべきですか?
bcrypt ハッシュが毎回異なるのはなぜですか?
関連ツール
すべてのツールを見る →JWT デコーダー — オンライン解析ツール
セキュリティツール
JWTトークンを無料のJWTデコーダーでオンラインデコード。ヘッダー、ペイロード、署名、有効期限、アルゴリズム、クレームを即座に検査できます。100%ブラウザ動作 — トークンはデバイスから外に出ません。登録不要、追跡なし。
JWT エンコーダー&ジェネレーター
セキュリティツール
無料のオンラインJWTジェネレーター&エンコーダー。ヘッダーとペイロードを組み立て、HS256、RS256、ES256で即座に署名できます。100%ブラウザ動作 — シークレットと鍵はデバイスから外に出ません。
MD5ハッシュジェネレーター&ファイルチェックサムツール
セキュリティツール
無料オンラインMD5ハッシュ生成ツール。ブラウザ上でMD5・SHA-256・SHA-1・SHA-512のハッシュ値を即座に生成。テキストやファイルのチェックサム検証・比較、ワンクリックコピー対応。登録不要でデータはサーバーに送信されません。
ランダムパスワード生成 — カスタマイズ可能&安全
セキュリティツール
無料のオンラインランダムパスワード生成ツール。ブラウザ上で安全な強力パスワードを即座に自動生成できます。長さや文字種のカスタマイズ、最大50個の一括生成に対応。エントロピー分析付き強度メーター搭載。データはサーバーに送信されません。
SHA-1ハッシュジェネレーター(160ビット・レガシー)
セキュリティツール
ブラウザ上でSHA-1ハッシュを生成。40文字の16進数出力、アップロード不要。Gitコミット確認・旧証明書フィンガープリント検証・移行監査向けレガシーツール。データはデバイス外に出ません。
SHA-256ハッシュジェネレーター&チェックサムツール
セキュリティツール
SHA-256ハッシュをオンラインで無料生成。テキストやファイルをブラウザ上でハッシュ化し、チェックサムを検証して64文字の16進数出力をコピー。登録不要、データはページ外に出ません。