rc4

April 23, 2008 in Linux, Mac OS X, Vista, Windows XP by chip

---------------------------------------------------------
FUNCTION rc4encrypt pIn
    return base64encode(rc4(pIn, "anUnguessableString"))
END rc4encrypt
---------------------------------------------------------

FUNCTION rc4decrypt pIn
    return rc4(base64decode(pIn), "anUnguessableString")
END rc4decrypt
---------------------------------------------------------
FUNCTION rc4 pText, pKey
    -- initialize
    REPEAT WITH i = 0 to 255
        put i into S1[i]
    END repeat
    put 0 into i
    REPEAT WITH n = 0 to 255
        add 1 to i
        IF i > length(pkey) THEN put 1 into i
        put chartonum(char i of pKey) into S2[n]
    END repeat
    put 0 into j
    REPEAT WITH i = 0 to 255
        put (j + S1[i] + S2[i]) mod 256 into j
        put S1[i] into temp
        put S1[j] into S1[i]
        put temp into S1[j]
    END repeat
    -- encrypt/decrypt
    put 0 into i ; put 0 into j
    REPEAT FOR each char c in pText
        put chartonum(c) into tChar
        put (i + 1) mod 256 into i
        put (j + S1[i]) mod 256 into j
        put S1[i] into temp
        put S1[j] into S1[i]
        put temp into S1[j]
        put (S1[i] + S1[j]) mod 256 into t
        put S1[t] into K
        put numtochar(tChar bitXor K) after tOutput
    END repeat
    return tOutput
END rc4
---------------------------------------------------------