MOO-Cows

moo-wizzen Topic: [MOO-wizzen] RC4 Encryption

Article #1144
Subject: [MOO-wizzen] RC4 Encryption
Author: James Littlefield
Posted: 1/9/2003 01:00:31 PM

Here's something I've been using for years, figured I'd pass it on.  The
speed fixes I've added have made it feasible for large pieces of text,
but if you may have to toss a suspend in there if you use really large
texts.  If you use it.. leave the credits in it :)

Taken from a post by manta <manta@nospam> to MOO-Cows on Tue, 21 Dec
1999 11:00:59, along with his subsequent fix for a negative number bug.
Various speed fixes by Kiyote

#2.rc4_hash
Owner:        Wizard (#2)
Permissions:  rc
Value:        {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255}

#2:rc4
Owner:            Wizard (#2)
Permissions:      rxd
Direct Object:    this
Preposition:      none
Indirect Object:  this

#2:rc4   this none this
  {text, key} = args;
  key = decode_binary(key, 1);
  S = K = {};
  times = 256 / length(key) + 1;
  for x in [0..times]
    K = {@K, @key};
  endfor
  K = K[1..256];
  S = this.rc4_hash;
  j = 0;
  for x in [0..255]
    j = (j + S[x + 1] + K[x + 1]) % 256;
    t = S[j + 1];
    S[j + 1] = S[x + 1];
    S[x + 1] = t;
  endfor
  i = j = 0;
  out = {};
  for x in (decode_binary(text, 1))
    i = (i + 1) % 256;
    j = (j + S[i + 1]) % 256;
    t = S[j + 1];
    S[j + 1] = S[i + 1];
    S[i + 1] = t;
    K = S[(S[i + 1] + S[j + 1]) % 256 + 1];
    out = {@out, ($math_utils:XOR(x, K) + 256) % 256};
  endfor
  return encode_binary(out);

-- 
James Littlefield <lfield@nospam>


_______________________________________________
Moo-wizzen mailing list
Moo-wizzen@nospam
http://www.moo-cows.com/mailman/listinfo/moo-wizzen





MOO-Cows Home