$the_message = "blablabla";
$the_key = "otherbla";
my $test_encode = &string2hex(&RC4($the_message,$the_key));
my $test_decode = &RC4(&hex2string($test_encode),$the_key);
print $test_encode . "\n\n" . $test_decode;
sub RC4 {
my($message,$key) = @_;
my($RC4);
my(@asciiary);
my(@keyary);
my($index,$jump,$temp,$y,$t,$x,$keylen);
$keylen = length($key);
for ($index = 0; $index <= 255; $index++) {
$keyary[$index] = ord(substr($key, ($index%$keylen) + 1, 1));
}
for ($index = 0; $index <= 255; $index++) {$asciiary[$index] = $index;}
$jump = 0;
for ($index = 0; $index <= 255; $index++) {
$jump = ($jump + $asciiary[$index] + $keyary[$index])%256;
$temp = $asciiary[$index];
$asciiary[$index] = $asciiary[$jump];
$asciiary[$jump] = $temp;
}
$index = 0;
$jump = 0;
for ($x = 0; $x < length($message); $x++) {
$index = ($index + 1)%256;
$jump = ($jump + $asciiary[$index])%256;
$t = ($asciiary[$index] + $asciiary[$jump])%256;
$temp = $asciiary[$index];
$asciiary[$index] = $asciiary[$jump];
$asciiary[$jump] = $temp;
$y = $asciiary[$t];
$RC4 .= chr(ord(substr($message, $x, 1))^$y);
}
return($RC4);
}
sub string2hex {
my($instring) = @_;
my($retval,$strlen,$posx,$tval,$h1,$h2);
my(@hexvals) = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
$strlen = length($instring);
for ($posx = 0; $posx < $strlen; $posx++) {
$tval = ord(substr($instring,$posx,1));
$h1 = int($tval/16);
$h2 = int($tval - ($h1*16));
$retval .= $hexvals[$h1] . $hexvals[$h2];
}
return($retval);
}
sub hex2string {
my($instring) = @_;
my($retval,$strlen,$posx);
$strlen = length($instring);
for ($posx = 0; $posx < $strlen; $posx=$posx+2) {
$retval .= chr(hex(substr($instring,$posx,2)));
}
return($retval);
}