Apologies in advance!

There’s something about the ARC4 algorithm that still fascinates me to this day… it’s just fun to play with!

function rc4md(m) {
    var r = [], s = [], i = 0, j = 0, k = 0, x, y, z;
    for (z = 0; z < 256; z++) {
        s[z] = z; r[z] = z;
        k = (((k + 1) * z) % 256);
    }
    var c, l = m.length, n = (l + (256 * 16));
    for (z = 0; z < n; z++) {
        if ((l > 0) && (z < l)) { c = m.charCodeAt(z); }
        else { c = s[k]; }
        i = ((i + 1) % 256);
        j = (((j << 1) ^ (s[i] + c)) % 256);
        x = s[i]; s[i] = s[j]; s[j] = x;
        k = (((k << 1) ^ (j + s[c])) % 256);
    }
    for (y = 0; y < 32; ++y) {
        r[y] = (r[y] ^ s[k]);
        k = ((k + r[y]) % 256);
    }
    var o = "", h = "0123456789abcdef";
    for (y = 0; y < 32; y++) {
        o += (h.charAt(r[y]>>4) + h.charAt(r[y]&0xf));
    }
    return o;
}

var z = "", m = ["", "0", "a", "abc", "acb", "abcd", "abce", "the quick brown fox jumps over the lazy dog"];
for (var k in m) {
    z += (rc4md(m[k]) + " " + m[k] + "\n");
}
console.log(z);
=
4edc57104c34679320117fbd98403deb8457a59a1c9b7e91884a4f05c917a7cc 
b9b53c6e32f5eeedbfdf0ce22a8e359212bf36f8a6d66c2d645250f3aa682ed6 0
d9188e109e58b64bc48ba481d18920c01ddbb7ea4120b74e7236d95622b82d19 a
55dec6a3e8793925cf9612b3fcd311593bb18210787b0d7b229d6eff8f703dfe abc
b60a8ba9fe569a3d59b70ee9921976039a753aaba0c9209c8b0aa1ded0119043 acb
5774da821f04b8a6b104a08c0b77e6630cbd327348e37f24c8cde41fd84aa013 abcd
13488161d5ef426de0c60162ae167de3a23645ff51b3859e2abfcd7b5ad56b2a abce
1f4461806b98d43b10086e1ebf4aa75e192968587ddaa97e2868c2e09067801d the quick brown fox jumps over the lazy dog
=

Leave a comment