ARC4

Stato
Discussione chiusa ad ulteriori risposte.

Oromis92

Utente Silver
22 Dicembre 2007
102
12
2
84
l'ho implementato tempo fa non l'avevo postato :S

Codice:
#!/usr/bin/perl -s
# coded by Oromis92
# <[email protected]>




$key = shift or die "usage: perl $0 [-d] 'key' 'infile' >> 'outfile'\n";
while (<>) {
$plain .= $_;
}
chomp($plain);
@key = split //,$key;
@plain = split //,$plain;
@key = map(ord, @key);

@S = 0..255;
foreach $i (0..255)  { 
$K[$i]=$key[$i%($#key+1)]; 
}



sub KSA {
	$j=0;
	for ($i=0;$i<255;$i++){
		$j = ($j + $S[$i] + $K[$i])%256;
		$temp = $S[$i];
		$S[$i] = $S[$j];
		$S[$j] = $temp;
	}
}



sub PRGA {
	$i = 0;
	$j = 0;
	for ($count=0;$count<length($plain);$count++) {
		$i = ($i + 1)%256;
		$j = ($j + $S[$i])%256;
		$temp = $S[$i];
		$S[$i] = $S[$j];
		$S[$j] = $temp;
		$t = ($S[$i] + $S[$j])%256;

		if (!$d) {
			$output = chr($S[$t] ^ ord($plain[$count]));
			$result .= $output;
		} else {
			if ($count < length($plain)) {
				$output = chr($S[$t] ^ ord((substr($plain,$count,1))));
				$result .= $output;
				$output = "";
			}
		}
	}
	print "$result\n";
}
KSA;
PRGA;

i monk si arrabbieranno per l' "#!/usr/bin/perl -s" ma era la via più comoda.
comunque il programma accetta come argomenti:
$ ./arc4.pl [-d] 'key' 'infile' >> 'outfile'
dove:
-d indica che bisogna decifrare
'key' è la password (max 256 caratteri)
'infile' è il file da cifrare (o da decifrare, se specificato -d)
>> 'outfile' è il nome del file da generare (più che altro è pigrizia)

alcuni si chiederanno come mai ho dichiarato due subroutine senza argomenti.
seplicemente così facendo ho migliorato la velocità del programma del 600% :eek:

se ci sono consigli su come velocizzarlo ulteriormente, fatevi avanti.

chi non conoscesse l'algoritmo può dare un'occhiata qui e qui
 
Stato
Discussione chiusa ad ulteriori risposte.