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