ベーシック認証のパスワードを設定するとき、みなさんはどのようにしてますか?
コマンドラインでパスワードを作る方やネット上のツールを利用される方が多いと思います。

私はネット上のツールで作ってるのですが、先日長めのパスワードを設定したところ9文字以降を何にしてもbasic認証を通過できてしまう自体に遭遇し、その理由と9文字以上のパスワードを設定する方法を調べました。

なぜ8文字までになってしまうのか

basic認証のパスワード作成にはhtpasswdコマンドが使われおり、内部的にはcrypt()アルゴリズムが使われおり、これが8文字までしか使わない仕様らしいです。

When using the crypt() algorithm, note that only the first 8 characters of the password are used to form the password. If the supplied password is longer, the extra characters will be silently discarded.
(linuxの場合、OSの)crypt()アルゴリズムを使うと、先頭の8文字しか使われないよ。長いパスワードを渡しても、はみ出た分は無視するよ。

【apache】ベーシック認証で8文字以上の長いパスワードを設定するときの注意

ネット上にある多くのツールもおそらくcrypt()アルゴリズムを使用しているのではないかと思われます。

8文字より長いパスワードを設定する方法

9文字以上のパスワードを設定するにはMD5アルゴリズムを使い、その方法は3つあります。

  • windowsのコマンドプロンプトを使う
  • htpasswdに-mオプションを追加する
  • MD5アルゴリズムに対応しているツールを使う

windowsのコマンドプロンプトを使う

windowsのhtpsswdコマンドはデフォルトでMD5アルゴリズムが使われているらしくそのままでも8文字以上のパスワードに対応したハッシュを作成できるようです。

C:\>htpasswd.exe -nb id passwordpassword

htpasswdに-mオプションを追加する

$ htpasswd -nbm id passwordpassword

MD5アルゴリズムに対応しているツールを使う

少し調べてみたところ下記の2つがMD5アルゴリズムに対応していました。

やはりMD5アルゴリズムに対応しているツールは少ないみたいですね。

この記事を書いた人

Yuki Tomioka

元焼肉店店長からゼロシード株式会社の1人目のwebエンジニアとなる。テクニカルディレクターとして勤務し、WordPressのカスタマイズやアクセス解析や広告運用などに従事。現在は事業会社のフロントエンドエンジニアとして勤務。
タイムチケットで相談も受け付けてます。