On Mon, 18 Feb 2002 13:51:51 +0100, Eugene Van Der Pijll wrote:
> [EMAIL PROTECTED] schreef op 18 februari 2002:
>> Eugene van der Pijll schreef op 17 februari 2002:
>> > 151:
>> >
>> > sub f{@s[$x,$y]=@s[($y+=$s[$x])%=@s,$x];
>> > $s[$x++]+$s[$y]}@k=pop=~/../g;$y+=hex$k[
>> > $x%@k],f for@s=0..255;$x=1;$y=0;$x%=@s,p
>> > rint$_^chr$s[f()%@s]for<>=~/./g
>> 
>> I haven't got a clue about RC4,
> 
> Neither have I, and I have no way to test them on long data samples, so
> test it before you use it...
> 
>> but inspecting Eugene's
>> masterpiece, can you save a stroke by replacing:
>> 
>> rint$_^chr$s[f()%@s]for<>=~/./g
>> with:
>> rint$_^chr$s[255&f]for<>=~/./g
> 
> Ah, then I can save another two strokes:
> 
> sub f{@s[$x,$y]=@s[($y+=$s[$x])%=@s,$x];
> $s[$x++]+$s[$y]-@s}@k=pop=~/../g;$y+=hex
> $k[$x%@k],f for@s=0..255;$x=1;$y=0;print
> $_^chr$s[f$x%=@s]for<>=~/./g

By the same token, we can shave off another two.  This:

  $y+=hex$k[$x%@k],f for@s=0..255;

becomes this:

  f$y+=hex$k[$x%@k]for@s=0..255;

The full version is at 146:

sub f{@s[$x,$y]=@s[($y+=$s[$x])%=@s,$x];
$s[$x++]+$s[$y]-@s}@k=pop=~/../g;f$y+=he
x$k[$x%@k]for@s=0..255;$x=1;$y=0;print$_
^chr$s[f$x%=@s]for<>=~/./g

-- Rocco Caputo / [EMAIL PROTECTED] / poe.perl.org / poe.sf.net

Reply via email to