「anonymous は許すまじ、htpasswdして送れ、spam対策だこれは」ちぅ issue tracker を運用しとる OSS があり。
手許にないやね、htpasswd、Apache 入れてねーし、と。
代わりになるものを探そうかとも思ったが、「それを信頼するために支払うコスト」が馬鹿らしいので、素直に Apache 入れた。Fedora など Red Hat 系なら(例えば)以下:
1 me@host: ~$ sudo yum install httpd
これで apr とか周辺ツールも入る。
そうなんだけど、そしてさらに「自分で使う気はない(htpasswdを素直に使う)」けれど、やるとしたらどんなかなと興味も出てきて。
Apache ではなくて nginx の basic authentication 向けにはこんなでいいみたい:
1 import base64, getpass, hashlib, os
2 username = "higetaroh"
3 salt = os.urandom(8) # edit the length as you see fit
4 print(
5 username + ':{SSHA}' + \
6 base64.b64encode(
7 hashlib.sha1(getpass.getpass() + salt).digest() + \
8 salt))
お塩少々、が「復号可能でなくちゃならんのよ」てことだろうね、これ。
SHA1 サポートはnginx 1.0.3 以降。この情報はここより。
htpasswd のデフォルトは md5 みたいで、こんなかなぁと思った:
1 # DON'T USE THIS FOR HTPASSWD ALTERNATIVE, BECAUSE THIS IS NOT CORRECT, MAYBE.
2 import base64, getpass, hashlib, os
3 username = "higetaroh"
4 salt = os.urandom(8) # edit the length as you see fit
5 print(
6 username + ':$apr1$' + \
7 base64.b64encode(
8 hashlib.md5(getpass.getpass() + salt).digest() + \
9 salt) + ".")
のだけど、生成される文字列の長さから、違うみたい。それ以前に、base64 でもないような気がする。uuencodeにしては文字種が少ない。ちなみに uuencodeならこうね:
1 # DON'T USE THIS FOR HTPASSWD ALTERNATIVE, BECAUSE THIS IS NOT CORRECT, MAYBE.
2 import binascii, getpass, hashlib, os
3 username = "higetaroh"
4 salt = os.urandom(8) # edit the length as you see fit
5 print(
6 username + ':$apr1$' + \
7 binascii.b2a_uu(
8 hashlib.md5(getpass.getpass() + salt).digest() + \
9 salt) + ".")
うん、多分違う。
ま、いっか。本気出すなら htpasswd のソース見りゃいいだけの話で。本気出す気はないので、ここらへんにしとこっと。
なお、オンラインツールはあります。http://www.htaccesstools.com/htpasswd-generator/。
「I do NOT log ANY data entered in this form.」と主張しとりますが、Google Analytics は仕掛けてあるわいな、あんど、https じゃないわいな、てことで、信じるか信じないかはあなた次第なのぞ。