Just an idea. Instead of XORing data with PRNG's output we may swap bytes in input block according to the random bytes.
For example:
Code:
for I := 1 to Count do
begin
J := Random(Count - 1) + 1;
Temp := Buf[I];
Buf[I] := Buf[J];
Buf[J] := Temp;
end;
Encryption/Decryption is not equal - we must pass forward or backwards and at some stage we need vector of random numbers - to pass backwards.
This thing may be used with other encryption tricks. It's just fun how we may mix and swap all bytes within a given block...