basic認証を使う時には Apache 付属の htpasswd コマンドを使ってパスワードの生成をしていたので、そのエンコード方法まで気にしていなかった。ちょこっと調べたところ、どうやら僕の使っているシステ爐良現爐任 DES 暗号が使われているらしい。
PHP では、文字列に crypt 関数を使うと DES 暗号化が行える。さっそく使ってみたものの、htpasswd で作成して保存しておいた文字列と crypt 関数を噛ませた結果の文字列が違う。それに実行を繰り返す度に crypt された結果が変わってしまう。これでは、既に暗号化されたパスワードとの比較ができないではないか。
はて?と、crypt 関数の説明を良く読むと「オプションで暗号化のベースとなる 2 文字の'salt' 文字列を指定」とある。また「salt引数が指定されない場合、PHPによりランダムに生成されます」とも書いてある。
となると、htpasswd で作成した際の salt 文字列がわからないと、同一の文字列にはならないのだろうというところまでは理解した。でも、htpasswd コマンドでそんな文字列は指定してなかった。えー、じゃあ、どうやって取得するんだよ!
と思って更に調べてたら「生成された DES 文字列の最初の2文字が salt です」だそうだ。htpasswd で生成した文字列の最初の2文字を salt に指定してやって crypt 関数を実行したら、、、おぉ、ビンゴ!
うーん、こんなんもしかして常識なんだろうか?
今日、家に帰ってきたら iMac G5 がもの凄い音を出していた。画面は消えていて、スリープランプが点いている状態なのにファンが最高速で回っていた模様。実は今朝も同じ症状が出ていたので、なんだかちょっとヤな感じ。
ヤな感じと言えば、どうも FireWire の具合もよろしくない。Capty PIX-MPTV/F1M が認識されたりされなかったりする。なんかおかしいなー。
カッコいい!!!