WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:MD5のみ対応のサーバのcrypt関数

神無月[MAIL][URL][WriteDate : Sun Oct 8 10:31:58 2000]

はじめまして。
CGIは、ほとんど初心者レベルで、フリーのスクリプトをDLして、表示部分を改造する程度のことしかできません。
それで、とある掲示板スクリプトを設置しようとしているのですが、
現在利用しているサーバでは、削除キー(パスワード)の暗号化処理に用いるcrypt関数がMD5のみ対応らしいのです。
↓これが、サーバ業者の説明です。
http://info.pos.to/member/domain/cgi/crypt.html

ところが、設置したい掲示板のスクリプトは、DES のみ対応のcrypt関数を使用しているらしくて、暗号化したのちログに書き込んでくれないのです。
(空文字を返してしまうので、ログを見ると、暗号化した削除キーが入る部分には、なにも書き込まれないのです)
したがって、実際に削除しようとしたときに「パスワードが設定されていません」というエラーになってしまいます。
そのスクリプトの制作者のサイトでも、サポート掲示板はありますが、
過去ログを検索したところ、「暗号化処理を完全に外して、そのままログに書き込むように改造する」といった方向の回答になっていました。

これは、あきらめて暗号化を外すしかないのか、と思っていたのですが、すでに設置している別の掲示板(KENT-WEBのyybbs)では、ちゃんと暗号化処理ができるのです。
たぶん、yybbsはDESとMD5の両方に対応できるようになっているんだ──とまでは想像がついたのですが、どう応用すればいいのか、途方に暮れています。

私が設置したい掲示板の暗号化処理部分はこうなっています。
----------------
#
# パスワード暗号化
#
sub cry_ {
$time = time;
($p1, $p2) = unpack("C2", $time);
$wk = $time / (60*60*24*7) + $p1 + $p2 - 8;
@saltset = ('a'..'z','A'..'Z','0'..'9','.','/');
$nsalt = $saltset[$wk % 64] . $saltset[$time % 64];
$epasswd = crypt($FORM{'delkey'}, $nsalt);
}
#
# パスワード解読
#
sub cryma_ {
if ($de =~ /^\$1\$/) { $crptkey = 3; }
else { $crptkey = 0; }
$ok = "n";
if (crypt($FORM{'delkey'}, substr($de,$crptkey,2)) eq $de) {
$ok = "y";
}
}
-------------------------------

私が持っているCGIの本を見ても、やはりMD5の暗号化処理についての記述はないし、
どこに質問していいか、大変困ってます。
かといって、暗号化処理の部分をはずして、削除キーをそのままログに書き込むのは、セキュリティのことを考えると不安ですし。
どなたか、上記の暗号化の部分を、どう改造したらMD5対応になるのか、おわかりになるかたはいらっしゃいませんでしょうか?
どうぞ、よろしくお願いいたします。


Qz[MAIL][URL][WriteDate :Sun Oct 8 12:29:05 2000]

テストはしてませんが、
>$epasswd = crypt($FORM{'delkey'}, $nsalt); 
この行を、
$epasswd = crypt($FORM{'delkey'}, '$1$'. $nsalt); 
と変更すればいけるのではないかと思います。

神無月[MAIL][URL][WriteDate :Sun Oct 8 13:05:45 2000]


>Qzさん

ありがとうございます!
さっそく改造してやってみたしたのですが……。
ログには、書き込まれるようになりました。
が、今度は解読できないようで、
「パスワード照合エラー」になってしまいました。
解読のほうも改造しないと、まずいんでしょうか。

重ね重ね申し訳ありませんが、よろしくお願いします。

Qz[MAIL][URL][WriteDate :Mon Oct 9 00:43:59 2000]

照合のほうは、ぱっと見、MD5対応っぽいですよね・・・

sub cryma_ { 
$ok = $de eq crypt($FORM{'delkey'}, $de) ?  "y" : "n";
}

これだと、どうでしょうか?


神無月[MAIL][URL][WriteDate :Mon Oct 9 08:40:16 2000]

ありがとうございます!

照合部分も、Qzさんにアドバイスいただいた通り改造して、
(コピー&ペーストしただけですが)
テストしたら、無事に投稿の修正と削除ができました。
もう1ヶ月も悩んでいた問題が、わずか一日で解決できて、嬉しいです。
本当にありがとうございました!

余談ですが、MD5のみのサーバって、そんなに数がないのでしょうか?
フリーのCGIを配布しているサイトをかなり廻ったのですが、
DESのみ対応のcrypt関数を利用しているスクリプトばかりだし、
MD5について説明してあるサイトは、ほとんどないし。
(WEB裏技さんのところでは、説明があったのですが、
難しすぎて、私の頭では理解できませんでした)
こういった問題は、実際にMD5のみの対応のサーバでテストしないと、
難しいので、あまり表面化してないのかもしれませんね。
(でも、実際に、そういうサーバを利用している人もいるんですけど)

とにかく、今回は、本当に助かりました。
「完了」にさせていただきますね。


Qz[MAIL][URL][WriteDate :Mon Oct 9 13:25:15 2000]


>余談ですが、MD5のみのサーバって、そんなに数がないのでしょうか? 

そうでもないと思いますよ。
ぼくが借りてるサーバーも、MD5のcrypt関数です。
でも
>$epasswd = crypt($FORM{'delkey'}, '$1$'. $nsalt);  
のように、"$1$"はつけなくても、ちゃんと、暗号化してくれます。

上記のスクリプトですが、
>if ($de =~ /^\$1\$/) { $crptkey = 3; } 
の行をみる限りでは、MD5の対応も考慮されているようです。
ただ、うまくいってないだけのようですが・・・



回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]