単語リストの全組合せの一覧

先日、戯れに Jonh the Ripper を使ってみた。 単語リストを使ったパスワードクラックができるのだが、 単語を組み合わせたクラックはできないみたいなので、 与えられた単語リストの全組合せを生成する Perl スクリプトを作ってみた:

#!/usr/bin/env perl
use strict;
use warnings;
my @wordseed = @ARGV;
sub wordmix
{
my ($wordpre, @wordlist) = @_;
my $n = scalar(@wordlist);
for (my $i=0; $i < $n; $i++) {
my @wordlistremained = @wordlist;
my $word = $wordpre . splice(@wordlistremained, $i, 1);
print "$word\n";
wordmix($word, @wordlistremained);
}
}
wordmix('', @wordseed);

一応できた (と思う) が、どうも美しさに自信がない。 この手の (数学的な?) アルゴリズムの実装は苦手かも…。 どうやって実装していいかなかなか思いつかず、30分くらいかかってしまった。 以下、実行例:

$ ./wordmix foo bar hoge hige >wordlist.txt
$ sudo john -wordfile:wordlist.txt /etc/shadow

add to hatena hatena.comment (0) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 0

コメントを書く

Your email is never shared. * 印の項目は必須項目です。

*
*