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 >Hi Rick,