[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 メーリングリストの案内