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 >>>>>>>