質問: ホームページにおいて、特定のユーザーしかアクセスできないようなページを作るために、パスワードによる認証を行おうと考えています。 perl による cgi を使う予定なのですが、プログラム中に if ($passwd ne "Test") {~~} などと書いたら、プログラムを見れる立場にある人間がみたら一目瞭然でパスワードを知られてしまいます。 そこでお聞きしたいのですが unix の /etc/passwd は暗号化されていて、ユーザーがそれを見ても簡単には解読できないと思います。perl の cgi から、同レベルに暗号化および認証することは可能ですか? 可能だとしたら、そのための方法などを教えてください(たとえば、それを行う便利なシステムコマンドや、フリーウェアがあるなど)。 ついでに、向学のためのウンチクとして、unix のパスワードの仕組みなどもお聞きできるとうれしいです(たしか、/etc/passwd からは絶対にデコードできないと聞いたことがあるのですが)。 よろしくお願いします。
回答: MD5には1方向性関数が使用されており、 この1方向性関数は数学的に逆演算が 出来ないことが証明されていたはずです。 そのため、「考えられる組み合わせの総当たりで 確かめる」しか方法がないのです。 MD5にはもう1つ入力データ長に関らず、固定長の データを出力すると言うという特徴があるので、 いろんな長さの文字列を変換して、常に一定長に なるようであればMD5でしょう。 一方、cryptの方ですが、これはOSの暗号化機能を 使う場合があるのでMD5とは限りません。