Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Encryption without a space
Message
From
15/10/2005 18:36:29
 
 
To
All
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Title:
Encryption without a space
Miscellaneous
Thread ID:
01059466
Message ID:
01059466
Views:
60
I have this code to encrypt and decrypt and I just can't remember where it is coming from. I don't know what it would take to have this function to encrypt by avoiding any use of the space character.
* 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
Michel Fournier
Level Extreme Inc.
Designer, architect, owner of the Level Extreme Platform
Subscribe to the site at https://www.levelextreme.com/Home/DataEntry?Activator=55&NoStore=303
Subscription benefits https://www.levelextreme.com/Home/ViewPage?Activator=7&ID=52
Next
Reply
Map
View

Click here to load this message in the networking platform