bcrypt Hashジェネレーター
ハッシュを生成
高いほど遅くなり、安全性が増します。12 が無難な既定値です。
古いバックアップから出てきたbcrypt hashと平文パスワードが、本当に一致するか確認したい場面は時々あります。あるいは、特定のcost factorでパスワードからどんなhashが作られるか知りたいこともあります。このツールは両方に対応します。パスワードを入力すると新しいhashを生成し、hashと候補パスワードを貼り付けると検証が成功するかを返します。本番環境のログイン照合と同じ定数時間比較を使います。
bcryptを生成またはverifyする
-
1
modeを選ぶ
パスワードから新しいhashを生成するか、既存の `$2a$` / `$2b$` / `$2y$` hashに対してパスワードをverifyします。
-
2
生成: 平文とcostを入力
costは4-13。10-12が一般的です。hashごとに16-byte random saltを作成します。
-
3
verify: hashと平文を貼り付け
ツールがhashからsaltとcostを抽出し、同じparameterで平文を再hashします。
-
4
結果を読む
生成modeでは60文字のhashをコピーできます。verify modeでは一致なら緑、不一致なら赤で返します。
検証モードの内部処理
保存済みhashが次のような場合:
$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6
verifierは次を行います。
- version(
2b)、cost(12)、salt(costの後の最初の22文字)、digest(最後の31文字)をparseします。 - 抽出したsaltとcostで候補の平文にbcryptを再実行します。
- 得られたdigestを、定数時間比較で元のdigestと比較します。
比較に成功すれば true、どこか違えば false です。
定数時間比較
単純な == で2つの文字列を比較すると、byteが違った時点で戻ります。これはタイミング側チャネルになり、十分なサンプルがあればhashの桁を少しずつ漏らす可能性があります。本番環境のパスワード照合(そしてこのツール)は定数時間比較を使い、常に全byteを調べるため、判定時間が先頭から何byte一致したかに依存しません。
よくある診断ケース
| 症状 | 考えられる原因 |
|---|---|
| パスワードは正しいはずなのに検証が失敗する | 入力末尾の空白またはBOM。両方を取り除きます。 |
検証が失敗し、versionが2yである |
一部のライブラリは2yを嫌いますが、有効で互換性があります。今後は2bで再ハッシュしてください。 |
| hashが短すぎる / 形式が不正 | bcrypt hashではありません。MD5は16進32文字、SHA-1は40文字、bcryptは$区切りで60文字です。 |
| cost不一致の警告 | 保存済みcostがポリシーの最小値を下回っています。次回ログイン成功時に再ハッシュします。 |
ログイン時の再ハッシュ
ベストプラクティス: ユーザーがログインに成功したら、保存済みhashのcostが現在のポリシーより低いか確認します。低ければ、新しいcostでパスワードを再ハッシュし、データベースを更新します。数か月かけて、ユーザーにパスワード変更を求めずに全体を引き上げられます。
このツールがしないこと
- 一括検証、1回に1つのhashを扱う設計です。
- 解読や総当たり攻撃、辞書攻撃やrainbow-table攻撃は意図的に対象外です。
- 平文の復元、bcryptは一方向です。パスワードを忘れた場合、唯一の道はリセットです。
よくある質問
hash化とverifyはサーバー側で計算されるため、暗号化された接続でサーバーへ送信されます。保存も記録もされず、ページのURLに追加されることもありません。
hashごとにsaltがrandom生成されるからです。それこそが目的です。同じパスワードを持つ2人のユーザーでも異なるhashになり、rainbow tablesを無効化します。
はい、それが検証モードの役割です。手元のhashを貼り付け、候補パスワードを貼り付けると、ツールが一致するかを確認します。
はい。現代的なvariantはいずれも相互運用できます。digestはversion間で互換性があり、違うのはtagだけです。2000年代の古いシステム由来の一部の$2$ hashは、古い形式を明示的にサポートするライブラリが必要な場合があります。
関連ツール
Base64ファイルエンコーダー
あらゆるファイル(PDF、ZIP、画像、実行ファイル)をBase64テキストにエンコードし、JSON、メール、YAML、data URIへ埋め込めます。ブラウザ内でローカルに動作し、アップロードはありません。
Atbash暗号エンコーダー
A-ZをZ-Aに対応させるヘブライ系の換字式暗号、Atbashでテキストをエンコードまたはデコードできます。同じ操作で暗号化と復号ができます。
CSRジェネレーター
PEMエンコードされた証明書署名要求と対応するRSA秘密鍵を生成します。コモンネーム、組織の項目、鍵のサイズ(2048、3072、4096ビット)を指定できます。
Base58エンコーダー・デコーダー
UTF-8テキストや16進バイト列をエンコードし、Bitcoin、Ripple、Flickrの各アルファベットでBase58を安全にデコードします。
SSL証明書ジェネレーター
自己署名のSSL/TLS証明書とRSA秘密鍵をすべてブラウザ内で生成します。Common Name、SAN、有効期間をカスタマイズし、PEM形式で書き出します。
チェックサム検証
任意のテキストの MD5、SHA-1、SHA-256、SHA-384、SHA-512、CRC32 チェックサムを計算し、期待値と比較して一致・不一致を明確に判定します。
このツールは他の言語でも利用できます
- Generator Hash bcrypt [ID]
- Trình tạo hash bcrypt [VI]
- Gerador de Hash bcrypt [PT]
- مولد Hash bcrypt [AR]
- Generator hashy bcrypt [PL]
- bcrypt Hash Oluşturucu [TR]
- bcrypt 해시 생성기 [KO]
- ตัวสร้าง bcrypt Hash [TH]
- Generador de Hash bcrypt [ES]
- bcrypt 哈希生成器 [ZH]
- bcrypt-hashgenerator [SV]
- Générateur de hachage bcrypt [FR]
- bcrypt-hashgenerator [NL]
- bcrypt-Hash-Generator [DE]
- bcrypt Hash Generator [EN]
- Generatore di hash bcrypt [IT]
- Генератор bcrypt-хешей [RU]