seedRand(0) >>>lcString = SPACE(0) >>>FOR lnI = 1 TO 250 >>> lcString = lcString + IIF(ROUND((getRand() * 100), 0) % 2 = 1, "Y", "N") >>>NEXT >>> >>>CLEAR >>>lcEnc = encode(lcString) >>>lcDec = decode(lcEnc) >>>? "Encoded, do they match?", (lcDec = lcString) >>> >>>lcEnc = encrypt(encode(lcString)) >>>lcDec = decode(decrypt(lcEnc)) >>>? "Encrypted and encoded, do they match?", (lcDec = lcString) >>> >>> >>> >>> >>>FUNCTION encode >>>LPARAMETERS tcString >>>LOCAL lnI, lnBit, lnOffset, lcChar, lnBinChar, lcString >>> >>> * Make sure our string is an even multiple of 8 (to round up to the nearest byte boundary) >>> lnString = LEN(tcString) >>> IF LEN(tcString) % 8 != 0 >>> tcString = tcString + SPACE(8 - (LEN(tcString) % 8)) >>> ENDIF >>> >>> * Create our output string >>> lcString = CHR(lnString) + REPLICATE(CHR(0), LEN(tcString) / 4) >>> >>> * Process through each byte of the input string >>> lnOffset = 2 >>> FOR lnI = 1 TO LEN(tcString) STEP 8 >>> lnBinChar = ASC(SUBSTR(lcString, lnOffset, 1)) >>> lnBit = 128 >>> FOR lnJ = 0 TO 7 >>> lcChar = SUBSTR(tcString, lnI + lnJ, 1) >>> lnBinChar = BITOR(lnBinChar, IIF(lcChar $ "Yy", lnBit, 0)) >>> lnBit = lnBit / 2 >>> NEXT >>> lcString = STUFF(lcString, lnOffset, 1, CHR(lnBinChar)) >>> lnOffset = lnOffset + 1 >>> NEXT >>> RETURN lcString >>> >>> >>> >>> >>>FUNCTION decode >>>LPARAMETERS tcString >>>LOCAL lcString >>> >>> * Extract the total output string length >>> lcString = SPACE(ASC(SUBSTR(tcString, 1, 1))) >>> lnOffset = 2 >>> FOR lnI = 1 TO LEN(lcString) >>> lcBinChar = ASC(SUBSTR(tcString, lnOffset, 1)) >>> lnBit = 128 >>> FOR lnJ = 0 TO 7 >>> lcString = STUFF(lcString, 1 + ((lnI - 1) * 8) + lnJ, 1, IIF(BITAND(lcBinChar, lnBit) != 0, "Y", "N")) >>> lnBit = lnBit / 2 >>> NEXT >>> lnOffset = lnOffset + 1 >>> NEXT >>> RETURN lcString >>> >>> >>> >>> >>>FUNCTION encrypt >>>LPARAMETERS tcString >>>LOCAL lcString >>> >>> seedRand(0) >>> lcString = SPACE(0) >>> FOR lnI = 1 TO LEN(tcString) >>> lnRand = ROUND(getRand() * 255.0, 0) >>> lcChar = SUBSTR(tcString, lnI, 1) >>> lcChar = CHR((ASC(lcChar) + lnRand) % 255) >>> lcString = lcString + lcChar >>> NEXT >>> RETURN lcString >>> >>> >>> >>> >>>FUNCTION decrypt >>>LPARAMETERS tcString >>>LOCAL lcString >>> >>> seedRand(0) >>> lcString = SPACE(0) >>> FOR lnI = 1 TO LEN(tcString) >>> lnRand = ROUND(getRand() * 255.0, 0) >>> lcChar = SUBSTR(tcString, lnI, 1) >>> lcString = lcString + CHR((ASC(lcChar) + 255 - lnRand) % 255) >>> NEXT >>> RETURN lcString >>> >>> >>> >>> >>>FUNCTION seedRand >>>LPARAMETERS tnSeed >>> >>> DECLARE INTEGER srand IN msvcr71.dll as cSrand INTEGER nSeed >>> DECLARE INTEGER rand IN msvcr71.dll AS cRand >>> cSrand(tnSeed) >>> >>> >>> >>> >>>FUNCTION getRand >>>LOCAL lnRand >>> >>> RETURN cRand() / 32767.0 >>>>>