htpasswd パスワード生成ツール
エンコード処理はすべてブラウザ内で完結します。データは送信されません
`.htpasswd` ファイルに書く 1 行を生成します。サイトやディレクトリにベーシック認証をかけるためのものです。標準的な 4 つの形式に対応しています。bcrypt($2y$、Apache の現在の推奨)、APR1-MD5($apr1$、Apache の伝統的な既定で古い設定に多数存在)、SHA-1({SHA})、そして平文です。残る 2 つは非標準です。SHA-256 と SHA-512 は `{SHA256}` / `{SHA512}` を出力しますが、Apache も nginx もこれを認識しません —— 明示的に対応するシステムでのみ使え、結果行にもその旨を表示します。 nginx で使うなら APR1 です。 nginx の `auth_basic_user_file` が公式に受け付けるのは crypt、apr1、{scheme} の 3 つで、`htpasswd -B` が生成する `$2y$` は `crypt_r() failed` で失敗することがよくあります —— 設定が通らなくなる割に、どちらのドキュメントにもはっきり書かれていない落とし穴です。 行そのものに加えて、そのまま貼れる htpasswd コマンドと Docker のワンライナーも出力します。コマンド内のパスワードはシングルクォートで囲むため、$ やバッククォートがシェルに展開されて別のものになることはありません。APR1 の結果は openssl passwd -apr1 の出力と 1 文字単位で一致します(テストで同ツールのベクターにより固定しています)。計算はすべてブラウザ内で行われ、パスワードが端末から出ることはありません。
機能
- 6 つの形式:bcrypt($2y$)、APR1-MD5($apr1$)、SHA-1({SHA})、SHA-256、SHA-512、平文
- nginx で使うなら APR1 —— nginx は $2y$ の bcrypt に対応せず crypt_r() failed になります
- bcrypt のコスト係数は 4〜15 で調整可能
- APR1 の出力は openssl passwd -apr1 と完全に一致
- .htpasswd の行、ハッシュ単体、htpasswd コマンド、Docker ワンライナーを同時に出力
- SHA-256 / SHA-512 は非標準として明示:Apache も nginx も認識しないため、openssl コマンドのみを出力します
- パスワード強度(エントロピーと段階)も併記するので、弱いパスワードは一目で分かります
- コマンド内のパスワードはシングルクォートで囲み、$ や引用符があってもシェルに展開されません
- 平文には明確な警告を付けます
- ユーザー名もパスワードも送信せず、すべてローカルで計算
使い方
- 入力欄にパスワードを入力します
- オプションでユーザー名(既定は admin)とハッシュ方式を指定します
- .htpasswd の行とコマンドが同時に表示され、最後の行がパスワード強度です
- 必要な行をコピーボタンで取り出します
よくある質問
- どの方式を選べばよいですか?
- 新規の設定なら bcrypt です。調整可能なコスト係数を持ち、検証に数十ミリ秒かかるため、総当たり攻撃のコストが大幅に上がります。APR1-MD5 は 1990 年代の設計(MD5 を 1000 回。当時は有効でしたが現在は取るに足りません)で、既存設定との互換のために残っているものです。SHA-1 はセキュリティ用途に使うべきではありません。平文はローカルでの試験専用です。
- bcrypt のコスト係数はいくつにすべきですか?
- 既定は 10(約 60 ミリ秒)です。この数値は 2 つのことを天秤にかけます。サーバーが検証のたびに費やす時間と、攻撃者が破解に費やす時間です。1 増えるごとに倍になり、12 はよく選ばれる値、15 では 1 リクエストごとに 2 秒近く待つことになります。専用ハードウェアの攻撃者を想定しない限り、10〜12 で十分です。
- 生成した結果はどう使いますか?
- 「.htpasswd の行」をサーバー上の .htpasswd ファイルに追記し(1 ユーザー 1 行)、Apache では AuthUserFile でそのファイルを指定して AuthType Basic と require valid-user を有効にします。Nginx では auth_basic と auth_basic_user_file で指定します。このファイルは Web 公開ディレクトリの外に置いてください。中に置くと、そのままダウンロードされてしまいます。
- パスワードは送信・記録されますか?
- いいえ。ハッシュはブラウザ内で計算され、ページはリクエストを送りません。パスワードは第三者サーバーを通すべきではない情報であり、ここには通す先のサーバー自体がありません。
- nginx は bcrypt に対応していますか?
- いいえ。nginx の `auth_basic_user_file` が公式に受け付けるのは crypt()、apr1、{scheme} の 3 つです。`htpasswd -B` が生成する `$2y$` は Apache の bcrypt 変種で、そのまま使うと `crypt_r() failed (22: Invalid argument)` になったり 500 になったりします。サーバーが nginx なら APR1-MD5 を選び、bcrypt は Apache 2.4+ に取っておいてください。
- htpasswd は SHA-256 に対応していますか?
- いいえ —— ここを明記していないオンラインツールは少なくありません。 htpasswd コマンドのオプションは `-B`(bcrypt)、`-m`(apr1)、`-s`(SHA-1)、`-d`(crypt)、`-p`(平文)の 5 つだけで、SHA-256 はありません。Apache も nginx も `{SHA256}` の項目を認識しません。ここで SHA-256 と SHA-512 を用意しているのは、RFC 2307 形式の LDAP や独自認証など、この形式を明示的に受け入れるシステムがあるためです —— ただし Apache や nginx に設定しないでください。認証は必ず失敗します。結果行に「非標準」と表示しているのはそのためです。
関連ツール
ハッシュ計算
エンコードMD5・SHA-1・SHA-256・SHA-512 のダイジェストを計算します(旧システム向けの MD4・MD2 も可)。日本語も UTF-8 バイトで計算します。
パスワード生成
生成長さと文字種を指定して強力なランダムパスワードを生成。エントロピーを即時表示し、強さを数値で比較できます。パスワードは端末内のみ、送信も記録もありません。
パスワード強度
エンコード長さと文字種から求めたエントロピー、キーボード配列・日付・繰り返しなどのパターン減点、よくあるパスワードの照合、5 つの攻撃シナリオ別の解析時間を示します。
Bcrypt
エンコードbcrypt のパスワードハッシュ($2y$)を生成、または既存のハッシュと照合します。コスト係数は変更でき、すべてブラウザ内で完結します。
Base64 変換
エンコードテキストを Base64 に変換し、Base64 からテキストへ戻します。日本語や中国語、emoji も UTF-8 として正しく処理。すべてブラウザ内で完結し、内容は送信しません。
URL エンコード
エンコード日本語や中国語、空白・記号を %XX にエスケープし、復元します。URL 全体とパラメータ値では方式が異なり、間違えるとリンクが開けません。ブラウザ内で処理します。