piapia123
ja

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 コマンドのみを出力します
  • パスワード強度(エントロピーと段階)も併記するので、弱いパスワードは一目で分かります
  • コマンド内のパスワードはシングルクォートで囲み、$ や引用符があってもシェルに展開されません
  • 平文には明確な警告を付けます
  • ユーザー名もパスワードも送信せず、すべてローカルで計算

使い方

  1. 入力欄にパスワードを入力します
  2. オプションでユーザー名(既定は admin)とハッシュ方式を指定します
  3. .htpasswd の行とコマンドが同時に表示され、最後の行がパスワード強度です
  4. 必要な行をコピーボタンで取り出します

よくある質問

どの方式を選べばよいですか?
新規の設定なら 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 に設定しないでください。認証は必ず失敗します。結果行に「非標準」と表示しているのはそのためです。

関連ツール