カレッヂ |
質問者 yuki
投稿日 2005/5/1(日) 04:01:32
サーバーソフト(httpd.exe)を立ち上げて、実行すると問題なくcrypt後の値が出るのですが、 レンタルサーバーにアップロードするとcrypt後の値が出なくなってしまいます…。 # フォームデータの送信→データの取得→パスワードの暗号化(ファイルへ保存)→ファイル(暗号化後)呼び出し入力してきた値と比較 # 登録用入力フォーム <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title>登録</title></head> <body> <hr> <h1>認証</h1><hr> <form action="./kakikomi.cgi" method="POST"> ログイン名:<input type="text" name="login"><br> パスワード:<input type="text" name="pass"><br> <input type="submit" value="登録する"> <input type="reset" value="訂正"> </form> </body> </html> ============================== # フォームデータの取得→暗号化→ファイルへ保存 #!/usr/bin/perl # フォームデータを受け取り→デコード→パスワードの暗号化→ファイルへの書き込み # フォームデータの取得 if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } # フォームデータの復元 foreach $pair (split(/&/, $query)) { ($key, $value) = split(/=/, $pair); # 文字のデコード $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $FORM{$key} = $value; } $salt = $abc[rand(64)] . $abc[rand(64)]; # 乱数を生成 $passwd = crypt($FORM{pass},$salt); open(OUT, ">> ./dat"); # ファイルを開く(./は同じ階層) print OUT "$FORM{login}:$passwd\r\n"; # ファイルを開きログイン名と暗号化したパスワードを保存 # サーバー出力 print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01EN"> <html> <head><title>フォームデータ</title></head> <body> <h1>登録完了!!</h1> <h1>フォームデータの結果</h1> <br> 入力したログイン名は$FORM{login}<br> 入力したパスワードは$FORM{pass}<br> 暗号化後のパスワードは$passwd<br> </body> </html> END ============================== # 比較用のhtml <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title>ログイン</title></head> <body> <hr> <h1>認証</h1><hr> <form action="./hikaku.cgi" method="POST"> ログイン名:<input type="text" name="login"><br> パスワード:<input type="text" name="pass"><br> <input type="submit" value="登録する"> <input type="reset" value="訂正"> </form> </body> </html> ============================== # フォームデータの受け取り→保存データの呼び出し(暗号化passwd)→入力してきたログインとパスワード(再暗号化)比較。 #!/usr/bin/perl # フォームデータの取得 if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } # フォームデータの復元 foreach $pair (split(/&/, $query)) { # &を切り離し$pairに代入 ($key, $value) = split(/=/, $pair); # =を切り離しそれぞれ$key,$valueに代入 # 文字のデコード $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $FORM{$key} = $value; # FORM{$key} = $valueで$keyを値に$valueの呼び出し } # 比較するファイルデータを呼び出す open(OPEN, "<./dat"); @PASS = <OPEN>; close (OPEN); # パスワードが正しいか比較。(フォーム入力と保存していた過去のpassと同じか比較。) foreach (@PASS){ ($login, $pass) = split(/:/, $_); $pass =~ s/[\r\n]$*//g; if($login eq $FORM{login} && $pass eq crypt($FORM{pass}, $pass)){ $x= "正しいです。"; $flag= 1; last; } } if(!$flag){ $x= "不正です。"; } # サーバー出力 print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01EN"> <html> <head><title>比較</title></head> <body> 比較は結果は$x<br> </body> </html> END ============================ $FORM{login},$FORM{pass}は問題無く呼び出せるのですが…、 $salt = $abc[rand(64)] . $abc[rand(64)]; $passwd = crypt($FORM{pass},$salt); 後の$passwdの値が出なくなってしまいます…。 どうか宜しくお願いします。
【習熟度】(未選択) |
質問者 yuki
[削除]
投稿日 2005/5/3(火) 08:19:28
色々試してみたところ上手くいきました。 $saltの乱数生成が上手くいっていませんでした…。 $salt = $abc[rand(64)] . $abc[rand(64)];←この部分の配列が上手くいっていない様でした…。 書き換えると上手くいきました、大変ご迷惑をおかけしました。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |