.htpasswdで設定しているBasic認証の文字が合ってるか確認している方法です。 例えば、新規に.htpasswdファイルを作成し、ユーザー:hoge,パスワード:1234を設定するとします。
$ htpasswd -c ./.htpasswd hoge New password:1234 Re-type new password:1234 Adding password for user hoge
.htpasswdの内容を確認すると以下のようになっています。
$ cat .htpasswd hoge:yRV2qHzSEDP96
ベーシック認証ってBase64で符号化されているので、htpasswdもそうだとずっと思ってたら、大きな勘違いしてました。 ブラウザ~Webサーバ間のパスワードはBase64送信されてます。なので通信さえ傍受すれば簡単に元のパスワードが判明します。
しかし、htpasswdは暗号化されてパスワードが保存されます。暗号化はデフォルトだと cript(), -m オプションを付けるとmd5になります。 暗号化されてる部分の最初の2文字(上の例だと yR )はSALTになります。SALTは毎回ランダムになります。SALTを暗号化の際に用いるので、同じパスワードを htpasswd コマンドで実行しても毎回異なる文字列となります。
さて、本題ですが、opensslコマンドを使うことで確認することができます。
-salt オプションで、.htpasswdファイル内のパスワード部分先頭2文字を指定し、その後ろにパスワードを指定しています。
こんな感じ。
$ openssl passwd -crypt -salt yR 1234 yRV2qHzSEDP96
なお、htpasswdコマンドで用いられるデフォルトのcrypt()暗号は8文字までしか認識しません。 8文字以上を使うには、-m オプションを付けます。
参考:
.htpasswd Basic認証パスワードを確認する方法と文字数制限の巻 - TrippyBoyの愉快な日々
【apache】basic認証をかけるメモ 〜 .htpasswdや.htaccessについて - tweeeetyのぶろぐ的めも
アクセス制限ベーシック認証~パスワードでページを守ろう~ - .htaccessの小技編 - futomi's CGI Cafe