#!/perl/bin/perl use strict; use Crypt::RC4; use Time::HiRes; use threads; use Thread::Queue; my $max_threads = 4; my $data1="C5C444220AD6FB08972792318300CC703814513EE013AF97B94FF9ACF23F9C8F0E748C04B2E18BB5A1B491BB73E23EC9A4233B9BCDE4854FD03DCBAC4B3E9EA00F5BF7A3A119B0FF2E66C9DD96E7F4F0972959082601AA5DD202DFB0 5039CA4FDC280517E244353690C0DE1A"; my $foo1=pack('H*',$data1); my $dt=time; print "$dt Start \n"; my $batchsize = 10000; my $key="A"; # The message queue through w my $jobs = Thread::Queue->new(); # Create the worker threads for (1..$max_threads) { async { my $ct; while ( 1 ){ my $start = time; my $items = $jobs->dequeue; my $SKIP=0; for my $key (@$items) { my $ucrypt=RC4($key,$foo1); my $clen = length($ucrypt); my @uchar = split(//,$ucrypt); for my $i (0..$#uchar) { my $val = ord($uchar[$i]); if($val>127) { $SKIP=1; last; } } if ($SKIP == 0 ){ print "matched using key:$key \n"; print "$ucrypt \n"; } }; my $end = time; print $end - $start," seconds\n"; printf "%0.2f items per second\n", @$items / ($end - $start); } }; } while (1) { my @batch = map { $key++ } 1 .. $batchsize; $jobs->enqueue(\@batch); my $sleep = 1; while ($jobs->pending() > $max_threads) { sleep $sleep; $sleep *= 2; }; }