パスワード暗号化ルーチン

CGIテクニック集トップへ





概要

Perlのcrypt関数により文字列を暗号化します。パスワードの暗号化に利用できます。当サイトのCGIのほとんどで利用されています。

必用な処理

  1. 二桁のsaltを作成
  2. cryptにて暗号化
  3. 値を返す

サンプルコード

 my $crypted_text = &makecrypt("plain_text");
 
 sub makecrypt {
    my $plain = shift;
    my $salt = join "", ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64];
    my $result = crypt($plain,$salt) or crypt($plain,'$1$'.$salt.'$');
    return $result;
 }

コードの解説

 my $crypted_text = &makecrypt("plain_text");

ここではplain_textという文字を暗号化します。

 sub makecrypt {
    my $plain = shift;
    my $salt = join "", ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64];
    my $result = crypt($plain,$salt) or crypt($plain,'$1$'.$salt.'$');
    return $result;
 }

パスワード暗号化ルーチン。二桁のsaltを作成し、入力された文字列をそのsaltと共にcrypt関数にて暗号化します。サーバーがMD5専用でDESがサポートしていなければsaltが$1$と$に囲まれた文字列である必要があるので暗号化失敗の際に$1$..$を用いたsaltで再度暗号化する。最近のシステムではほとんどDESがサポートされているので最初のcryptで暗号化したパスワードは作成され二つ目のcryptは実行されないと思われます。

暗号化の結果は、同じ元の文字列であってもsaltがランダムで作成されているので実行毎に違う物になります。

関連するCGIテクニック

パスワードチェックの方法
管理用パスワードの作り方
管理用パスワードチェックの方法