Working Encryption Sample

The following is a full self-running sample that you can cut and paste into a PRG file to demonstrate the basic features of the EncryptString() and DecryptString() methods for synmmetrical encryption:

CLEAR ALL
DO wwEncryption

CLEAR

LOCAL loEnc as wwEncryption
loEnc = CREATEOBJECT("wwEncryption")

lcOrig = "Hello World"
? lcOrig

lcKey = "12345678901234567890123456789012"
? lcKey
? LEN(lcKey)

? "*** Hashing ***"

loEnc.SetBinHexMode(.T.)
lcVal = loEnc.ComputeHash(lcOrig, "HMACSHA256", lcKey,.T.)
? lcVal
?

? "*** Encryption: Defaults ***"

lcVal  = loEnc.encryptstring(lcOrig, lcKey)
? lcVal

lcOrig2 = loEnc.decryptstring(lcVal, lcKey)
? lcOrig2

?

? "*** Encryption: TripleDES ***"

*** DES with CBC: 8 bytes IV
lcIVKey = "12345678"


*** 16 or 24 byte keys for CBC
lcKey2 = PADR(lcKey,24)
? LEN(lcKey2)

*** Use CBC Cipher with IV with TripeDES
lcVal  = loEnc.encryptstring(lcOrig, lcKey2, .F., "TripleDES", "CBC", "", "", lcIvKey)
? lcVal

lcOrig2  = loEnc.decryptstring(lcVal, lcKey2, .F., "TripleDES", "CBC","", "", lcIvKey)
? lcOrig2

?

? "*** Encryption: AES ***"

*** AES CBC: 16 bytes IV
lcIVKey = "1234567890123456"


*** 16 or 24 byte keys for CBC
lcKey2 = PADR(lcKey2,24)
? LEN(lcKey2)

lcVal  = loEnc.encryptstring(lcOrig, lcKey2, .F., "AES", "CBC","","",lcIvKey)
? lcVal

lcOrig2  = loEnc.decryptstring(lcVal, lcKey2, .F., "AES", "CBC","","",lcIvKey)
? lcOrig2

Key and IV Sizes

Figuring out the right sizes for key and IV bytes is complicated, and depends on the specs of your application, and specs of the algorithm used. Please check with your provider to find out the exact sizes when working with third party integrations.


© West Wind Technologies, 2023 • Updated: 08/15/21
Comment or report problem with topic