* Text encryption * expC1 Text to encrypt * expC2 Encryption key (without this key, the text will not be encrypt) * Return the encrypted text * The lenght of the returned string equal the lenght of the text to encrypt FUNCTION Encrypt LPARAMETERS tcTxt,tcKey LOCAL lnPKey,lnLenKey,lnLenTxt,lcKey,lcRes,lnNPos,lnByte,lnAscKey,; lnSumAsc,lnPosIgnore,lnKeySXOR,lnKeyLXOR,lnKeyBXOR,lcKey STORE IIF(EMPTY(M.tcKey),"CLEF D'ENCRYPTAGE",tcKey) TO lcKey STORE LEN(lcKey) TO lnLenKey STORE LEN(tcTxt) TO lnLenTxt LOCAL ARRAY laSKey[lnLenTxt,2] STORE 0 TO lnSumAsc, lnKeyBXOR FOR lnPKey = 1 TO lnLenKey STORE lnSumAsc + ASC(SUBSTR(lcKey, lnPKey, 1)) TO lnSumAsc NEXT FOR lnPKey = 1 TO lnLenTxt STORE SUBSTR(lcKey, (lnPKey % lnLenKey)+1, 1) TO laSKey[lnPKey,1] STORE ASC(laSKey[lnPKey,1]) TO lnAscKey STORE BITXOR(lnKeyBXOR,BITAND(255,BITLSHIFT(lnAscKey, lnPKey%5))) TO lnKeyBXOR STORE lnPKey TO laSKey[lnPKey,2] NEXT STORE lnSumAsc % 3 TO lnPosIgnore STORE BITRSHIFT(lnSumAsc,lnLenKey%3) % 256 TO lnKeySXOR STORE lnLenKey % 256 TO lnKeyLXOR =ASORT(laSKey) STORE "" TO lcRes FOR lnPos = 1 TO lnLenTxt STORE laSKey[lnPos,2] TO lnNPos STORE ASC(SUBSTR(tcTxt,lnNPos,1)) TO lnByte STORE BITXOR(lnByte, 2^(1+lnPos%4)) TO lnByte STORE BITXOR(lnByte, 2^(1+lnNPos%4+lnPos%2)) TO lnByte STORE BITXOR(lnByte, lnKeySXOR) TO lnByte STORE BITXOR(lnByte, lnKeyLXOR) TO lnByte STORE BITXOR(lnByte, lnKeyBXOR) TO lnByte STORE BITXOR(lnByte, ASC(laSKey[lnPos,1])) TO lnByte STORE lcRes + CHR(lnByte) TO lcRes NEXT RETURN lcRes * Text decryption * expC1 Text to decrypt * expC2 Encryption key (without this key, the text will not be decrypt) * Return the decrypted text * The lenght of the returned string equal the lenght of the text to decrypt FUNCTION Uncrypt LPARAMETERS tcTxt,tcKey LOCAL lnPKey,lnLenKey,lnLenTxt,lcKey,lcRes,lnNPos,lnByte,lnAscKey,; lnSumAsc,lnPosIgnore,lnKeySXOR,lnKeyLXOR,lnKeyBXOR,lcKey STORE IIF(EMPTY(tcKey), "CLEF D'ENCRYPTAGE", tcKey) TO lcKey STORE LEN(lcKey) TO lnLenKey STORE LEN(tcTxt) TO lnLenTxt LOCAL ARRAY laSKey[lnLenTxt,2] STORE 0 TO lnSumAsc, lnKeyBXOR FOR lnPKey = 1 TO lnLenKey STORE lnSumAsc + ASC(SUBSTR(lcKey, lnPKey, 1)) TO lnSumAsc NEXT FOR lnPKey = 1 TO lnLenTxt STORE SUBSTR(lcKey, (lnPKey % lnLenKey)+1, 1) TO laSKey[lnPKey,1] STORE ASC(laSKey[lnPKey,1]) TO lnAscKey STORE BITXOR(lnKeyBXOR,BITAND(255,BITLSHIFT(lnAscKey, lnPKey%5))) TO lnKeyBXOR STORE lnPKey TO laSKey[lnPKey,2] NEXT STORE lnSumAsc % 3 TO lnPosIgnore STORE BITRSHIFT(lnSumAsc,lnLenKey%3) % 256 TO lnKeySXOR STORE lnLenKey % 256 TO lnKeyLXOR =ASORT(laSKey) STORE SPACE(lnLenTxt) TO lcRes FOR lnPos = 1 TO lnLenTxt STORE laSKey[lnPos,2] TO lnNPos STORE ASC(SUBSTR(tcTxt,lnPos,1)) TO lnByte STORE BITXOR(lnByte, ASC(laSKey[M.lnPos,1])) TO lnByte STORE BITXOR(lnByte, lnKeyBXOR) TO lnByte STORE BITXOR(lnByte, lnKeyLXOR) TO lnByte STORE BITXOR(lnByte, lnKeySXOR) TO lnByte STORE BITXOR(lnByte, 2^(1+lnNPos%4+lnPos%2)) TO lnByte STORE BITXOR(lnByte, 2^(1+lnPos%4)) TO lnByte STORE STUFF(lcRes, lnNPos, 1, CHR(lnByte)) TO lcRes NEXT RETURN lcRes