[PHP-users 20509]Re: mcrypt関数で暗号化した結果について

NAKAMURA Takeshi 1yen @ sh.rim.or.jp
2004年 2月 21日 (土) 08:18:03 JST


仲村です

 突っ込んでくれないので自分で...
On Fri, 20 Feb 2004 15:08:32 +0900,
 NAKAMURA Takeshi <1yen @ sh.rim.or.jp> wrote:
>  入力は無制限 出力は必ず16バイト となれば重ならないようにすることは
                          ^^と書いておきながら
> 原理的に不可能です。

この辺間違えてます
>  md5 だと 2^64 / sha1 だと 2^160 なので両方を組みあわせると
              ^^ 8*16 なので 128bit です
> 確率としては 2^(64+160) となると。
                  ^^^^^^128+160
# md5 と sha1 のとる値に相関関係が全くなければの話です

これだけではなんなので、
>  経験的に真ですが、絶対ではありません。
ちょっと試してみました
近藤さん>・・・と言う事は、md5()ってプライマリなキー作る時は結構使えそうですね。
 なんてことも言われてちょっと恐かったりもするので。

% cat mkHASH.pl
#!/usr/local/bin/perl
use Digest::MD5 qw(md5_base64);

$HashList="HASH.txt";
$SOURCES="Source.txt";
$DictionaryList = 
  "/usr/share/dict/eign"   ." ".
  "/usr/share/dict/web2a"  ." ".
  "/usr/share/dict/freebsd"." ".
  "/usr/share/dict/words"  ." ".
  "/usr/share/dict/propernames" ." ".
  "`find /home/PORT_WORK/usr/ports/textproc/aspell/work/ -type f`";

$CMD=sprintf("echo %s | xargs cat | sort -u > $SOURCES",$DictionaryList);
system($CMD);

open (OUT, ">$HashList"); open (IN,  "<$SOURCES");
while(<IN>){
  print OUT md5_base64($_) . " : $_";
}

%cat HASH2.awk
#!/usr/bin/awk -f
BEGIN{hash=word="";i=0;}
{
  if(hash == $1){
    print hash,word,$3;
    word=sprintf("%s, %s",word,$3);
  }else{
    hash=$1;word=$3;
  }
  printf("%d\r",++i);
}
END{print "";}

% ./mkHASH.pl
% sort HASH.txt | ./HASH2.awk
771412
と、77万ほどの 単語, 熟語, プログラムの1行, \n区切りのバイナリ などを
突っ込んで md5値の一致はありませんでした。

 辞書に使おうと aspell もコンパイルしてみたんですが...バイナリ辞書でした。
せっかくなので、コンパイルしたディレクトリ丸ごと試してみましたが、
全く一致がないとは 2^19.6 ぐらいの数ではびくともしないわけですね。
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+
 関西沖縄青年の集い がじまるの会 手伝い 一人だけの勝手に神奈川支部
 仲村 武 <1yen @ sh.rim.or.jp>
 最初は perl でなく shell でやっていたんですが...
 foreach X ( `cat /usr/share/dict/* | sort -u` )
   echo `echo $X | md5`" : $X" >> HASH.txt
 done
 あまりに遅く perl かなぁと、本を見ながら書いたところ、比べものに
ならないぐらい(tail -f がついていけないぐらい)早くなりました。
 やっぱ、こんなに fork しちゃいけないなと。
 2つめの awk スクリプトも最初の sort しないものよりかなり高速版
 初版は全部 hash 変数に持っていたから遅いしメモリー食うし。
 P133 Mem 48なマシンには酷な作業でした。


PHP-users メーリングリストの案内