Some of you only use BASIC, or some other language with no shift or xor instruction, so none of this will have been useful. Initialize an array like this:
-- use an array of 256 1-byte values
ub1 x[0..255];
-- fill it with the values 0 to 255 in some pseudorandom order
-- (this is derived from the alleged RC4)
{ for i in 0..255 do
{ x[i] := i;
}
}
k=7;
{ for j in 0..3 do
{ for i in 0..255 do
{ s = x[i];
k = (k + s) mod 256;
x[i] = x[k];
x[k] = s;
}
}
}
And then use the array for hashing like this:
-- use the length of the message to initialize the hash
-- XXX can be 0, or some constant, or some argument
hash := (XXX+len) mod 256;
-- hash the characters in the message one byte at a time
{for i in 0..len-1 do
{hash := (hash + message[i]) mod 256; hash := x[hash];}}
This is known as Pearson's hash, I think it was in the June 1990 issue
of Communications of the ACM. See, no shifts or XORs. It is somewhat
similar to RC4, a
(very proprietary) random number generator owned(?) by RSA Security.