#!/usr/local/bin/perl5 # # genpwd.cgi # # 1998/03/29 Ver.0.01 # # (c) 1998 がま <gama@mvg.biglobe.ne.jp> # # $copyright = 'genpwd.cgi Ver.0.01 Copyright 1998 gama'; # --------------------------------------------------------------------- $ownname = 'genpwd.cgi'; $back = 'genpwd.htm'; { $ct = $ENV{"CONTENT_TYPE"}; $cl = $ENV{"CONTENT_LENGTH"}; # --------------------------------------------------------------------- $|=1; # バッファリングを止める # --------------------------------------------------------------------- read(STDIN, $in, $cl); ($user,$word1,$word2) = split('&',$in); $user = &str_decode_from_form($user); $word1 = &str_decode_from_form($word1); $word2 = &str_decode_from_form($word2); if ($word1 ne $word2) { &err_html("最初に入力されたパスワードと再入力が一致しません。"); exit; } if (length($word1) < 6) { &err_html("パスワードは6文字以上入力してください。"); exit; } srand(time|$$); # 乱数用のおまじない my($salt,$str); $str = 'abcdefghijklmnopqrstuvwxyz' . 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' . '0123456789./'; $salt = &randstr($str,2); $newpwd=crypt($word1, $salt); &result_html("$user:$newpwd"); exit; } ####################################################################### # $str の文字から、長さ $len のランダムな文字列を作成する。 sub randstr { my($str,$len) = @_; # サブルーチンの引数 my($strlen) = length($str); my($r); for (1..$len) { $r .= substr($str,rand($strlen),1); } return $r; } ####################################################################### sub err_html { my($msg)=$_[0]; print "Content-type: text/html\n\n"; print <<END; <HTML> <HEAD><TITLE>Error</TITLE></HEAD> <BODY TEXT="#000000" BGCOLOR="#FFFFFF"> <H4>エラーがありました</H4> <HR> <BR> $msg <BR> <HR> <CENTER> <A HREF="$back">戻る</A> </CENTER> <HR> </BODY> </HTML> END } ####################################################################### sub result_html { my($msg)=$_[0]; print "Content-type: text/html\n\n"; print <<END; <HTML> <HEAD><TITLE>暗号化されたパスワード</TITLE></HEAD> <BODY TEXT="#000000" BGCOLOR="#FFFFFF"> <BR> <CENTER> <H4>暗号化されたパスワード</H4> <HR> <PRE> <FORM> <INPUT NAME="pass" TYPE="TEXT" VALUE="$msg" SIZE=40 ><BR> </FORM> </PRE> </CENTER> <HR> <CENTER> <A HREF="$back">戻る</A> </CENTER> <HR>$copyright </BODY> </HTML> END } ####################################################################### sub str_decode_from_form { my($str)=$_[0]; # サブルーチンの引数を $str=~ s/^\w+=//; # = までを削除・・・ $str=~ s/\+/ /g; # + を space へ $str=~ s/%(..)/pack("c",hex($1))/ge; # decode $str=~ s/\r//g; # LF を削除 return($str); }