PRINT RC4EncDecString$("abc", "g") pause FUNCTION RC4EncDecString(sData$, sKey$) AS STRING IF sData = "" || sKey = "" THEN FUNCTION = "" LOCAL aState[256] AS INTEGER LOCAL nKeyLength, nDataLength nKeyLength = LEN(sKey) nDataLength = LEN(sData) LOCAL sMid$, iIndex%, xCC%, yCC%, sResult$, sSwap, iMid FOR INTEGER iCC = 0 TO 255 aState[iCC] = iCC NEXT FOR INTEGER iCC = 0 TO 255 sMid = MID$(sKey, MOD(iCC, nKeyLength) + 1, 1) iIndex = MOD(ASC(sMid) + aState[iCC] + iIndex, 256) sSwap = aState[iCC] aState[iCC] = aState[iIndex] aState[iIndex] = sSwap NEXT FOR INTEGER iCC = 1 TO nDataLength xCC = MOD(xCC + 1, 256) yCC = MOD(aState[xCC] + yCC, 256) sSwap = aState[xCC] aState[xCC] = aState[yCC] aState[yCC] = sSwap iIndex = MOD(aState[xCC] + aState[yCC], 256) iMid = ASC(MID$(sData, iCC, 1)) XOR aState[iIndex] sResult = sResult & CHR$(iMid) NEXT FUNCTION = sResult END FUNCTION