[Tokyo.pm] Re: crypt() eq 'DES' || 'MD5'
Hiroyuki OYAMA
oyama @ crayfish.co.jp
2002年 7月 11日 (木) 07:21:58 CDT
クレイフィッシュの小山です。
On Thu, 11 Jul 2002 09:53:31 +0900
Dan Kogai <dankogai @ dan.co.jp> wrote:
> *BSDに限って言えば、非常に単純な手法が使えます。
>
> $isDES = !($crypted =~ /^\$/o);
>
> なぜそうなのかは man 3 crypt にて。
>
> わりとまっとうそうなのは
>
> $isDES =~ ($crypted =~ /^[\.\/0-9A-Za-z]{13}$/o);
>
> かな。少なくともMD5の場合にはもっと長くなるので、これで判別がついたと思
> います。
なるほど、実行して結果を見るという前提ならばこんな感じで判
断できるのですね。
sub is_des_crypt {
my $password = shift;
my $salt = shift;
$salt = substr($salt, 0, 2) if length($salt) > 2;
$salt = $salt x 2 if length($salt) < 2;
my $crypted = crypt($password, $salt);
length($crypted) == 13 && substr($crypted, 0, 2) eq $salt;
}
sub is_md5_crypt {
my $password = shift;
my $salt = shift;
my $crypted = crypt($password, $salt);
$crypted =~ /^\$1\$$salt\$/;
}
わかりました。一度実行して結果を見てDESで無ければ、DESの
cryptモドキを実行して使うことにしてみます。
ありがとうございました。
______________
Hiroyuki OYAMA <oyama @ crayfish.co.jp>
System Operations Dept.
Crayfish Co.,Ltd. <http://Crayfish.CO.JP/>
"PerlとRubyでYahoo!Messenger"
-> http://ymca.infoware.ne.jp/
Tokyo-pm メーリングリストの案内