Crypt関数
$code = crypt(“pass”,”key”);
サーバーにLOGINパスワードを保存しておくのは
危険なので暗号化して保存しておけば気が楽です。
crypt関数を利用しDESで暗号化しようとインターネットで探していると
Crypt暗号生成CGI
このようなページを発見しましたので勉強の息抜きに
自分で上と同じような動作をするものを書いて見ました。
(上のプログラムのソースは見ていません。動作のみを参考にしました。)
※本プログラムはデコードに
jcode.plを使用しています。
※プログラムはご自由にお使い下さい。
#!/usr/bin/perl
##################################################
# Cryptを利用した暗号化出力ソフト
#
# 作者:orbit
# HP:https://www.orsx.net/
#
##################################################
#------------各種設定------------
#このプログラムまでのURL
$url = "crypt.cgi";
$hp_name = "関数CRYPTを利用した暗号化";
#------------各種設定------------
#--------------------------------
#メインルーチン開始
#--------------------------------
#デコード
require './jcode/jcode.pl';
if($ENV{'REQUEST_METHOD'} eq "POST"){
#POSTで送信されたデータを変数$dataへ格納
read( STDIN, $data, $ENV{ 'CONTENT_LENGTH' } );
}else{
#GETで送信されたデータを変数$dataへ格納
$data = $ENV{'QUERY_STRING'};
}
#&で区切られているデータを分解
@pairs = split(/&/,$data);
foreach $pair (@pairs) {
#=で区切られているデータを分解
($name, $value) = split(/=/, $pair);
#16進数に戻す
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#タグの無効化
$value =~ tr/+/ /;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/n/<br />/g;
$value =~ s/t/ /g;
$value =~ s/r//g;
#ライブラリー内のconvertサブルーチンの実行
&jcode'convert(*value,'sjis');
$FORM{$name} = $value;
}
#--------------------------------
#HTML出力
#--------------------------------
#変数へ格納
$id = $FORM{'id'};
$pass = $FORM{'pass'};
#パスをキーで暗号化
$s_pass = crypt($pass,$id);
#$passと$s_passが同じで無ければステートメントを実効
if ($pass ne $s_pass){&after};
&head;
print <<html
<h1>Crypt関数を利用した暗号化</h1>
<form method="GET" action="$url">
ID:<input size="15" name="id" type="text" value="ORBIT SPACE">
PASSWORD:<input size="15" name="pass" type="text" value="www.orsx.net">
<input value="OK" type="submit"></from>
<hr />
$come
<br />
<br />
<br />
<small>
<center>
HP:<a Href="https://www.orsx.net/" Target="_blank">ORBIT SPACE</a>
</center>
</small>
</body>
</html>
HTML
;
#================================
#サブルーチン(結果出力)
#================================
sub after{
$come = <<html
$id / $pass >>>> <input size="15" type="text" value="$s_pass">
HTML
;
}
#================================
#サブルーチン(ヘッター)
#================================
sub head{
#コンテンツタイプの指定
print "Content-type: text/htmlnn";
print <<head
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>$hp_name</title>
</head>
<body>
HEAD
;
}
0 Comments.