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