DataFlex
DataFlex
AES and CHACHA20 Encrypt/Decrypt Text
See more Encryption Examples
Demonstrates the use of the new EncryptSb and DecryptSb methods introduced in Chilkat v9.5.0.67 to encrypt/decrypt the contents of StringBuilder objects.Note: This example requires Chilkat v9.5.0.67 or greater.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Variant vSb
Handle hoSb
Integer i
Handle hoCrypt
String sIvHex
String sKeyHex
Variant vBdEncrypted
Handle hoBdEncrypted
Variant vSbOriginal
Handle hoSbOriginal
String sTemp1
Move False To iSuccess
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// First build a string to be encrypted
Get Create (RefClass(cComChilkatStringBuilder)) To hoSb
If (Not(IsComObjectCreated(hoSb))) Begin
Send CreateComObject of hoSb
End
Move 1 To i
While (i < 10)
Get ComAppendInt Of hoSb i To iSuccess
Get ComAppend Of hoSb " the quick brown fox jumped over the lazy dog." + (character(13)) + (character(10)) To iSuccess
Move (i + 1) To i
Loop
Get ComGetAsString Of hoSb To sTemp1
Showln sTemp1
// The string to be encrypted looks like this:
// 1 the quick brown fox jumped over the lazy dog.
// 2 the quick brown fox jumped over the lazy dog.
// 3 the quick brown fox jumped over the lazy dog.
// 4 the quick brown fox jumped over the lazy dog.
// 5 the quick brown fox jumped over the lazy dog.
// 6 the quick brown fox jumped over the lazy dog.
// ...
Get Create (RefClass(cComChilkatCrypt2)) To hoCrypt
If (Not(IsComObjectCreated(hoCrypt))) Begin
Send CreateComObject of hoCrypt
End
// Specify the encryption to be used.
// First we'll do AES-128 CBC
Set ComCryptAlgorithm Of hoCrypt To "aes"
Set ComCipherMode Of hoCrypt To "cbc"
Set ComKeyLength Of hoCrypt To 128
Move "000102030405060708090A0B0C0D0E0F" To sIvHex
Send ComSetEncodedIV To hoCrypt sIvHex "hex"
Move "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F" To sKeyHex
Send ComSetEncodedKey To hoCrypt sKeyHex "hex"
// When EncryptSb is called, the contents of the source (sb)
// remains unmodified. The encrypted bytes are written into bdEncrypted.
// If bdEncrypted already contained data, it is replaced with the encrypted bytes.
Get Create (RefClass(cComChilkatBinData)) To hoBdEncrypted
If (Not(IsComObjectCreated(hoBdEncrypted))) Begin
Send CreateComObject of hoBdEncrypted
End
Get pvComObject of hoSb to vSb
Get pvComObject of hoBdEncrypted to vBdEncrypted
Get ComEncryptSb Of hoCrypt vSb vBdEncrypted To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoCrypt To sTemp1
Showln sTemp1
Procedure_Return
End
// Examine the encrypted bytes:
Get ComGetEncoded Of hoBdEncrypted "base64_mime" To sTemp1
Showln sTemp1
// Sample encrypted data:
// 0DdNZ22ckMMJBiaKhAu3wUEfh16XW356NIUsDmNs/xwbHe/p1201OmpfzwXwKktkAefu2pckrBgC
// df+1w8lRo+KAy5n5wlAgMGM/UrsVJsp0BmDPk1vaxKrmrGpSXOVCQs1n2+0atIs5YLiOG+Va3+Mi
// EQNb4YK7bNMmvt0++irBxTiGnkx/RncfKwgkbBUpl2x7yV13MW6lapDT6Md0DKAMsTXFJYGeIdEf
// g2uxDDQzI5gUOUHTMrXQ8paD/K76KKB9Jpp/kAM9z8g/d8KUmuphA7KI64d38xsgOmcITlbhlCQ2
// PDkcU6RRzX0FUTUSMgQukhy0jkLZEjHX9poKJD+iJTOkcQUC3OqR9hKhSrvIgJN4lxdR71MheOoQ
// 2wmvRdq+agTWWh333Vmb6J6yDV79aSpnqEDrA8Ks7Xzciol0gve91+JtVJlJKjWwEzWEU8GxF7Q8
// eaWI70lsC5nTLGcbqgKu6gzkzHlHyHaE2FAQA/d5I2dvfsAYUQCza0Zdyw8mmTtHhlP2Tfxj1uPv
// H4Q7BGuKnx3SWT2CnpbX4091w7KzLAztrbFBo/Tf9w8ZpgTK9k1ryfW9/xnk6rW6iQ==
// Decrypt to restore back to the original:
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbOriginal
If (Not(IsComObjectCreated(hoSbOriginal))) Begin
Send CreateComObject of hoSbOriginal
End
Get pvComObject of hoBdEncrypted to vBdEncrypted
Get pvComObject of hoSbOriginal to vSbOriginal
Get ComDecryptSb Of hoCrypt vBdEncrypted vSbOriginal To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoCrypt To sTemp1
Showln sTemp1
Procedure_Return
End
// Examine the original data:
Get ComGetAsString Of hoSbOriginal To sTemp1
Showln sTemp1
// ----------------------------------------------------------------------------------
// To do chacha20 encryption, just change the settings:
Set ComCryptAlgorithm Of hoCrypt To "chacha20"
Set ComKeyLength Of hoCrypt To 256
// The initial count is the initial block counter for the chacha20 algorithm.
// It can be any integer, but must be set to the same when decrypting.
Set ComInitialCount Of hoCrypt To 22
// EncryptSb completely replaces the contents of bdEncrypted.
Get pvComObject of hoSb to vSb
Get pvComObject of hoBdEncrypted to vBdEncrypted
Get ComEncryptSb Of hoCrypt vSb vBdEncrypted To iSuccess
// However.. DecryptSb appends the decrypted text to whatever may
// have already existed within sbOriginal.
Get pvComObject of hoBdEncrypted to vBdEncrypted
Get pvComObject of hoSbOriginal to vSbOriginal
Get ComDecryptSb Of hoCrypt vBdEncrypted vSbOriginal To iSuccess
Showln "----"
Showln "The original data should be here twice. Once from the AES decrypt, and again from the chacha20 decrypt."
Get ComGetAsString Of hoSbOriginal To sTemp1
Showln sTemp1
Showln "Success."
End_Procedure