| 
[19]  crypt関数を使った暗号化/照合のサンプル |   |   
| 
2001/7/3 (Tue) 11:17:21 - あけび  |   
 | # MD5ではsaltは$1$〜$で挟まれた0〜8文字。9文字目以降は切り捨てられる。 
# DESではsaltは2文字。3文字目以降は切り捨てられる。 
# MD5ではcrypt関数にsaltを渡す場合、先頭に$1$を付けなければ値の返らないサーバあり。 
# DES/MD5両用サーバでは、crypt関数にsaltを渡す場合、先頭に$1$を付ければMD5、付けなければDESで値が返る。 
# DES/MD5どちらの場合でも、照合時には暗号化された文字列をそのままsaltとして渡せばよい。わざわざsalt部分を抜き出す必要はない。 
 
などの条件を加味して組んだperl用crypt暗号化/照合ルーチン。 
DES/MD5両用サーバではMD5が適用されます。 
crypt関数の使えないサーバでは使用できません。 
 
 
# 暗号化 
# 引数:パスワード平文 
# 戻り値:暗号化された文字列 
# 使用例:$pass = &enc_crypt('PassWord'); 
sub enc_crypt { 
    local($plain) = @_; 
    local($s) = ''; 
    local(@salt) = ('0'..'9','A'..'Z','a'..'z','.','/'); 
    srand; 
    1 while (length($s .= $salt[rand(@salt)]) < 8); 
    crypt($plain,index(crypt('a','$1$a$'),'$1$a$') == 0 ? '$1$'.$s.'$' : $s); 
} 
 
# 照合 
# 引数:パスワード平文,暗号化された文字列 
# 戻り値:一致=真 不一致または入力不備=偽 
# 使用例:&check_crypt('PassWord',$pass) ? '一致' : '不一致' 
sub check_crypt { 
    local($plain,$crypt) = @_; 
    ($plain ne '' && $crypt ne '' && crypt($plain,$crypt) eq $crypt); 
} 
 |  
  |   
 |