ARC4

Stato
Discussione chiusa ad ulteriori risposte.

Oromis92

Utente Silver
22 Dicembre 2007
102
12
2
84
sviluppare un programma che effettui la codifica di un testo arbitrario secondo il metodo ARC4

potete usare questo per documentarvi:
http://www.quequero.org/RC4_Analysis_and_Cryptanalysis
(non copiate il codice :evil: )

ecco la mia soluzione in.... indovinate un pò?
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;
for 

($i=0;$i<length($key);$i++) {
	$key[$i]=ord($key[$i]);	
}

@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 = sprintf('%X', ($S[$t] ^ 

ord($plain[$count])));
			if (length($output) % 2 == 0) {
			

	$result .= $output;
			} else {
				

$output .= "0" ;
				$result .= $output;
				

$output = "";	
			}
		} else {
			if 

($count*2 < length($plain)) {
				$output = chr($S[$t] ^ 

(hex(substr($plain,($count*2),2))));
				$result .= $output;
		

		$output = "";
			}
		}
	}
	print 

"$result\n";
}
KSA;
PRGA;
 
Stato
Discussione chiusa ad ulteriori risposte.