htpasswd生成
Apacheが求める行を、自分の機械の中で。
例を読み込むと入力と設定が一時的に変わります。元の内容に戻せます。
0文字
出力
上に貼り付けるか入力すると、ここに結果が表示されます。
ファイルは端末の外に出ません
このツールはすべてブラウザ内で動作します。貼り付けた内容は端末内で処理され、サーバーには送信されないため、トークンや鍵、未公開の文章でも安心して使えます。
使用例
例:公開前のサイトにBasic認証、2人分の .htpasswd をbcryptで作る
リニューアル中のサイトを確認用のサーバーに上げ、お客さま用と社内用の2つのIDだけで見られるようにします。入力欄には「client:Kaede-Nami-0427」と「staff:Yuzu-Tsuki-1103」を1行ずつ(どちらも例です)。ハッシュ方式はbcrypt、コスト10、接頭辞 $2y$ のままです。
- 「生成する」を押すと、1行目は client:$2y$10$kWX3R6hpPR7EGvtf/PskHO0xfftPlXpAdjDiAE5VroxPQu5hIC1i2 のようになります。行数2、コスト2^10と表示されます。
- ユーザー名のあとのハッシュは60文字です。「$2y$10$」のあとの22文字がソルトで、毎回ランダムなので、もう一度押すと別の文字列になります。どちらも同じパスワードで通ります。
- 2行を .htpasswd に保存し、公開フォルダの外に置きます。
- .htaccess には AuthType Basic、AuthName "Restricted"、AuthUserFile(.htpasswd の絶対パス)、Require valid-user の4行を書きます。
| ハッシュ方式 | できる行の形(1行目) | ハッシュの長さ |
|---|---|---|
| bcrypt(コスト10) | client:$2y$10$… | 60文字 |
| APR1(Apache MD5) | client:$apr1$(ソルト8文字)$… | 37文字 |
| SHA-1 | client:{SHA}… | 33文字(ソルトなし) |
ブラウザでサイトを開くとIDとパスワードを聞かれ、2人だけが入れます。パスワードはハッシュにしてもとに戻せないので、相手にはパスワードそのものを別の方法で伝えます。
使い方
- 1行に ユーザー名:パスワード の形で入力します。パスワードだけならハッシュだけが出ます。
- 既存のファイルに合わせる場合を除き、bcryptのままにしてください。
- 「生成する」を押します。bcryptは意図的に遅いので少し待ちます。それが目的です。
- 出た行を .htpasswd に貼り付けます。
よくある質問
- パスワードはどこかに送られますか。
- 送られません。このページが存在する理由がそこにあります。ソルトはブラウザ自身の乱数生成器から取り、ハッシュ化もお使いの機械の中で行われ、何も送信されません。本物のパスワードを他人のサーバーに貼り付けることこそ避けるべきことです。
- なぜ時間がかかるのですか。
- bcryptはそうなるように作られているからです。コストは2のべき乗なので、1つ上げると攻撃者の手間が倍になり、同時にこちらの待ち時間も倍になります。10が通常の落としどころで、数行ならすぐ終わりますが、数十行では数秒かかることがあります。12はおよそ4倍の時間がかかります。
- APR1やSHA-1を使うべき場面はありますか。
- 既存のファイルに合わせるときだけです。APR1はApache独自のソルト付きMD5で、多くの環境で htpasswd がオプションなしに書き出す形式です。ここでのSHA-1はソルトなしで、同じパスワードなら常に同じ行になるため、新規には使うべきではありません。
- bcryptは長いパスワードの一部を無視するというのは本当ですか。
- 本当です。bcryptが読むのは最大72バイトで、それを超えた分はハッシュに届きません。黙って切り捨てず、件数を数えて表示します。
- 日本語のパスワードは使えますか?
- 使えます。パスワードはUTF-8でハッシュ化します。ただしbcryptが読むのは72バイトまでで、ひらがなや漢字は1文字3バイトなので、24文字を超えた分はハッシュに反映されません。超えた行があると、その行数を結果の下に表示します。
- 同じパスワードなのに、生成するたびに違う行になるのはなぜですか。
- bcryptとAPR1は、毎回ランダムなソルトをまぜてハッシュにするからです。どの行でも同じパスワードでログインでき、同じパスワードの人がいてもファイルからはわかりません。ソルトのないSHA-1だけは、同じパスワードならいつも同じ行になります。
- 無料ですか。
- はい、すべて無料です。