パスワードチェックの方法

CGIテクニック集トップへ





概要

暗号化されたパスワードを照合し成否を判断します。

必用な処理

  1. crypt関数にてテキストと暗号化文字列を照合
  2. 値を返す

サンプルコード

 if (&checkcrypt($plain_pwd,$enc_pwd)){
     print "パスワードはマッチしました。";
 } else {
     print "パスワードが違います。";
 }
 
 sub checkcrypt {
     my ($pwd,$encpwd)=@_;
     return(crypt($pwd,$encpwd) eq "$encpwd");
 }

コードの解説

 if (&checkcrypt($plain_pwd,$enc_pwd)){
     print "パスワードはマッチしました。";
 } else {
     print "パスワードが違います。";
 }

$plain_pwdは入力フォーム等により渡されたテキスト状態のパスワード。$enc_pwdはデータファイル等に保存されている暗号化されたパスワード。それぞれcheckcryptルーチンに渡し、checkcryptはマッチすると1を返し、マッチしなければ0を返します。

 sub checkcrypt {
     my ($pwd,$encpwd)=@_;
     return(crypt($pwd,$encpwd) eq "$encpwd");
 }

crypt関数により入力されたテキストを暗号化されているパスワードに埋め込まれているsaltにより暗号化し、その結果が暗号化されたパスワードと同じかをチェックし、その結果を返します。crypt関数は第二引数のsaltをその文字列から自動的に検出します。最初の二文字だけ分離し渡す必用はありません。saltが$1$から始まるものであっても自動的に検出します。

関連するCGIテクニック

パスワード暗号化ルーチン
管理用パスワードの作り方
管理用パスワードチェックの方法