MD5ハッシュでリネーム
#!/usr/local/bin/perl use strict; use warnings; use Digest; if(@ARGV){ foreach(@ARGV){ my $ext = substr $_, (rindex $_, '.'); open FILE, $_; binmode FILE; my $ctx = Digest->new('MD5'); $ctx->addfile('FILE'); close FILE; rename $_, $ctx->hexdigest.$ext; } } else{ opendir DIR, "./"; my @files = readdir DIR; closedir DIR; foreach(@files){ next if /^\.\.?$/; next unless /.*\.jpe?g$/i || /.*\.gif$/i || /.*\.png$/i; my $ext = substr $_, (rindex $_, '.'); open FILE, $_; binmode FILE; my $ctx = Digest->new('MD5'); $ctx->addfile('FILE'); close FILE; rename $_, $ctx->hexdigest.$ext; } } __END__
作成中のコードに、ファイルの区別用にMD5ハッシュ関数の値をファイル名として使う部分があって、実際にそのコードも書いてみたんだけど… うーん、MD5ハッシュの衝突を見つける方法が見つかってるし、SHA-1あたりにしておこうかな… reducedならともかく、完全版のSHA-1はまだ破られてないようだし。
/.J: SHA-0、MD5、 MD4にコリジョン発見、reduced SHA-1も
MD5とMD4での複数のコリジョン発見[PDF]