- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!Perlで暗号発生をやてみる{{category 道楽}}
まず二つのキーワードを発生スクリプトへ送る導入ページは楽したいので、CGIでなくhtmlで作っておくことにした。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-2022-JP">
<title>Own001:暗号発生テスト</title>
</head><body>
<h1 class=title>Own001:暗号発生テスト</h1>
<FORM ACTION="./test.cgi" enctype="multipart/form-data" method="post">
発生pass:
<INPUT TYPE="text" NAME="pass9" value="hogehage"><BR>
比較Pass:
<INPUT TYPE="text" NAME="pass0" value="hikaku"><BR>
<br/>
<INPUT TYPE="reset" VALUE="やんぴ">
<INPUT TYPE="submit" NAME="all" VALUE="実行">
</form></body></html>
まず主役の暗号発生と照合用暗号発生のサブを準備。
#パスワードのエンコ(単独)
sub pass_e {
my($pass) = @_;
my @moji = ('a'..'z','A'..'Z','0'..'9');
srand;
my $key0 = int(rand(64));
my $key1 = int(rand(64));
my $key2 = $moji[$key0] . $moji[$key1];
return crypt($pass,$key2);
}
#パスワードのエンコ(再現)
sub pass_c {
my($pass,$pass9) = @_;
my $key2;
if($pass9 =~ /^\$1\$([^\$]+)\$/) {
$key2 = $1;
} else {
$key2 = substr($pass9, 0, 2);
}
return crypt($pass, $key2);
return crypt($pass, $pass9);
}
次にパラメータの受け取りなど
#!/usr/bin/perl
use CGI qw(:standard);
$pass9 = param('pass9');
$pass0 = param('pass0');
my $ret1 = &pass_e($pass9);
my $ret2 = &pass_c($pass0,$ret1);
残りは、比較と結果表示で、めんどうになったのでここまでとする。