Bcryptハッシュジェネレーターとは?
bcryptアルゴリズムを使用して、ソルト付きの安全なパスワードハッシュを生成します。データベース保存用のパスワードハッシュ化や、既存ハッシュと平文の照合に使えます。
bcrypt は数えきれないほどの本番認証システムを支えてきたパスワードハッシュ方式です。ハッシュごとにランダムなソルトが埋め込まれるので、同じパスワードでも結果はまったく異なります。コストファクター(4〜18)は値を 1 上げるごとに計算量が倍になり、総当たり攻撃を実用的でない速度まで遅らせつつ、ログイン遅延は許容範囲に抑えられます。
使い方
- ハッシュ化したいパスワードまたは文字列を入力し、コストファクター(ソルトラウンド)を4〜18の範囲で選択します。
- 「生成」をクリックしてbcryptハッシュを作成します。コストファクターが高いほど強固なハッシュが生成されますが、計算に時間がかかります。
- 生成されたハッシュをアプリケーションにコピーするか、「検証」タブでパスワードと既存ハッシュを照合します。
使用するタイミング
- 新規ユーザーのパスワードをデータベースに書き込む前にハッシュ化する。
- 既存の $2b$ ハッシュを使ってログイン処理を再現・検証する。
- 本番ハードウェアでハッシュ時間を計測し、最適なコストを決める。
結果
バックエンド開発者がユーザーパスワードを安全に保存する際、12ソルトラウンドでハッシュ化し、PostgreSQLデータベースに保存するための$2b$形式のハッシュ文字列を取得します。
よくある質問
- 本番ではコストファクターをいくつに設定すべき?
- 現在のサーバー機なら 12 が一つの下限で、14 が標準になりつつあります。ログインあたりの所要時間が 200〜500 ミリ秒に収まるあたりが目安です。100 ミリ秒未満は弱すぎ、1 秒を超えると非力な端末のユーザー体験を損ねます。
- 同じパスワードなのに毎回ハッシュが違うのはなぜ?
- bcrypt は呼び出しごとに 16 バイトのソルトを新しく作り、ハッシュ文字列の中に組み込みます。これが狙いで、二人とも「letmein」をパスワードにしてもデータベースには全く別の文字列が並ぶため、漏えいしても一枚のレインボーテーブルでは解読できません。
- パスワード長に上限はある?
- bcrypt は 72 バイトを超えた入力を黙って切り捨てます。長いパスフレーズを許容するなら、先に SHA-256 でダイジェストを取ってから bcrypt に渡してください。多くのアプリは入力を 64〜72 文字に制限しています。
- 別の bcrypt ライブラリで作ったハッシュも検証できる?
- できます。$2a$、$2b$、$2y$ の接頭辞は PHP、Node、Python、Ruby、Go、Java の実装間で相互運用できます。どれで作ったハッシュでも検証タブに貼れば、元のパスワードと照合できます。
- 2026 年でも bcrypt のままで大丈夫? argon2 に乗り換えるべき?
- 今は argon2id が推奨ですが、bcrypt も安全で、どの言語でも使えます。既存システムで bcrypt が動いているなら急いで移行する必要はありません。新規開発なら最初から argon2 を選ぶのが無難です。