l'ho implementato tempo fa non l'avevo postato :S
i monk si arrabbieranno per l' "#!/usr/bin/perl -s" ma era la via più comoda.
comunque il programma accetta come argomenti:
-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%
se ci sono consigli su come velocizzarlo ulteriormente, fatevi avanti.
chi non conoscesse l'algoritmo può dare un'occhiata qui e qui
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:
dove:$ ./arc4.pl [-d] 'key' 'infile' >> 'outfile'
-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%
se ci sono consigli su come velocizzarlo ulteriormente, fatevi avanti.
chi non conoscesse l'algoritmo può dare un'occhiata qui e qui