#!/usr/bin/perl ## vigenere crack tool # (c) 2012 F00L.DE # by Rup0rt ## check for arguments # 1 - FILENAME # 2 - KEY LENGTH if (!defined $ARGV[1]) { print "Usage: $0 \n"; exit(1); } $filename = $ARGV[0]; $keylen = $ARGV[1]; $maxletter = 'e'; # this is very important... e is max letter for english texts $key = ""; open(FILE, $filename); @file = ; close(FILE); for ($pos=0; $pos<$keylen; $pos++) { printf("CRACKING position %3d: ", $pos+1); %chars = (); $keypos = 0; foreach $line (@file) { for ($i=0;$i= 97) && (ord($char) <= 122)) { if (($keypos % $keylen) == $pos) { if ($chars{$char}) { $chars{$char} += 1; } else { $chars{$char} = 1; } } $keypos++; } } } $max = (sort {$chars{$b} <=> $chars{$a}} keys %chars)[0]; $keyord = ((ord($max)-ord($maxletter)) % 26) + 97; $key = $key . chr($keyord); printf("%3d = %s\n", $keyord, chr($keyord)); } print "\nCRACKED password: $key\n";