From Clomosy Docs
TCLCrypto component is a cryptographic library used for encryption, hashing, and token operations. It supports modern algorithms such as AES, SHA-2, SHA-3, and JWT. This component allows developers to configure keys, IVs, output formats, and advanced options for cryptography tasks.
| Feature | Use of | Definition |
|---|---|---|
| TCLCrypto | Crypto = TCLCrypto.Create; | Creates a TCLCrypto object to perform encryption, hashing, and JWT operations. |
| AType | Crypto.AES.AType = atCBC; or Crypto.SHA3Hash.AType = txof; | Selects algorithm type or mode.
AES Options: atCBC, atECB, atCFB, atOFB. SHA3 Options: tsha (standard), txof (extendable output). |
| KeyLength | Crypto.AES.KeyLength = kl256; | Sets key length in bits. Common options: 128, 192, 256. |
| IVMode | Crypto.AES.IVMode = userdefined; | Determines IV usage for AES. Options: userdefined, rand, none. |
| IV | Crypto.AES.IV = 'MyCustomIV'; | Sets the initialization vector when IVMode = userdefined. |
| Key | Crypto.AES.Key = 'MySecretKey1234567890'; | Defines encryption key for AES operations. |
| OutputFormat | Crypto.AES.OutputFormat = base64; or Crypto.SHA2Hash.OutputFormat = hexa; or Crypto.SHA3Hash.OutputFormat = raw; | Sets output format for AES and all hashing algorithms.
Options: base64, hexa, raw. |
| PaddingMode | Crypto.AES.PaddingMode = PKCS7; | Determines padding for AES encryption. Options: PKCS7, ISO10126, None. |
| Unicode | Crypto.AES.Unicode = yesUni; | Enables Unicode support for AES encryption/decryption. |
| Encrypt | CipherText = Crypto.AES.Encrypt('Text'); | Encrypts input text using AES settings. |
| DecryptStr | PlainText = Crypto.AES.DecryptStr(CipherText); | Decrypts AES-encrypted text to plain string. |
| HashSizeBits | Crypto.SHA2Hash.HashSizeBits = 512; or Crypto.SHA3Hash.HashSizeBits = 256; | Sets bit length of hash output. Commonly 256 or 512 bits. |
| Version | Crypto.SHA3Hash.Version = 512; | Defines SHA3 algorithm version, depending on selected mode. |
| Hash | HashResult = Crypto.SHA2Hash.Hash('Text'); or Crypto.SHA3Hash.Hash('Text'); | Generates hash of input text using SHA2 or SHA3 algorithms. |
| JWT.SetClaim | Crypto.JWT.SetClaim('role','admin'); | Adds a key-value claim to the JWT payload. |
| JWT.CompactToken | Token = Crypto.JWT.CompactToken('secret_key', 256); | Generates a signed JWT token. Algorithm bit size adjustable (128, 256, 512). |
Example
var
MyForm: TCLForm;
Memo1: TclMemo;
EditInput: TclEdit;
BtnEncrypt: TclProButton;
BtnDecrypt: TclProButton;
Crypto: TCLCrypto;
AES_CBC: string;
// Encrypt Button click event
void BtnEncryptOnClick
{
Crypto = TCLCrypto.Create;
try
with Crypto.AES do
{
AType = atCBC;
KeyLength = kl128;
IVMode = userdefined;
IV = 'MyCustomIV123456';
Key = 'MySecretKey12345';
OutputFormat = base64;
PaddingMode = PKCS7;
Unicode = yesUni;
}
AES_CBC = Crypto.AES.Encrypt(EditInput.Text);
Memo1.Lines.Add('Encrypted (CBC Base64):' +#13#10+ AES_CBC);
finally
Crypto.Free;
}
}
// Decrypt Button click event
void BtnDecryptOnClick
{
if (AES_CBC == '')
{
ShowMessage('No encrypted text available.');
exit;
}
Crypto = TCLCrypto.Create;
try
with Crypto.AES do
{
AType = atCBC;
KeyLength = kl128;
IVMode = userdefined;
IV = 'MyCustomIV123456';
Key = 'MySecretKey12345';
OutputFormat = base64;
PaddingMode = PKCS7;
Unicode = yesUni;
}
Memo1.Lines.Add('Decrypted Text:' +#13#10+ Crypto.AES.DecryptStr(AES_CBC));
finally
Crypto.Free;
}
}
{
MyForm = TCLForm.Create(Self);
// Edit for user to type
EditInput = MyForm.AddNewEdit(MyForm,'EditInput','');
EditInput.Align = alTop;
EditInput.Margins.Left = 10;
EditInput.Margins.Right = 10;
EditInput.Margins.Top = 10;
// Memo for show result
Memo1 = MyForm.AddNewMemo(MyForm,'Memo1','');
Memo1.Align = alClient;
Memo1.Margins.Left = 10;
Memo1.Margins.Right = 10;
Memo1.Margins.Top = 5;
Memo1.Margins.Bottom = 10;
Memo1.ReadOnly = True;
// Encrypt Button
BtnEncrypt = MyForm.AddNewProButton(MyForm,'BtnEncrypt','Encrypt');
BtnEncrypt.Align = AlTop;
BtnEncrypt.Margins.Left = 10;
BtnEncrypt.Margins.Right = 10;
BtnEncrypt.Margins.Top = 5;
BtnEncrypt.clProSettings.IsRound = True;
BtnEncrypt.clProSettings.RoundHeight = 2;
BtnEncrypt.clProSettings.RoundWidth = 2;
BtnEncrypt.SetclProSettings(BtnEncrypt.clProSettings);
// Decrypt Button
BtnDecrypt = MyForm.AddNewProButton(MyForm,'BtnDecrypt','Decrypt');
BtnDecrypt.Align = AlTop;
BtnDecrypt.Margins.Left = 10;
BtnDecrypt.Margins.Right = 10;
BtnDecrypt.Margins.Top = 5;
BtnDecrypt.clProSettings.IsRound = True;
BtnDecrypt.clProSettings.RoundHeight = 2;
BtnDecrypt.clProSettings.RoundWidth = 2;
BtnDecrypt.SetclProSettings(BtnDecrypt.clProSettings);
// Events
MyForm.AddNewEvent(BtnEncrypt,tbeOnClick,'BtnEncryptOnClick');
MyForm.AddNewEvent(BtnDecrypt,tbeOnClick,'BtnDecryptOnClick');
MyForm.Run;
}
Example For SHA3 (tsha mode)
var
Crypto: TCLCrypto;
SHA3Result: string;
{
Crypto = TCLCrypto.Create;
try
Crypto.SHA3Hash.AType = tsha;
Crypto.SHA3Hash.OutputFormat = base64;
Crypto.SHA3Hash.HashSizeBits = 512;
SHA3Result = Crypto.SHA3Hash.Hash('Hello World');
ShowMessage('SHA-3 (tsha): ' + SHA3Result);
finally
Crypto.Free;
}
}
Example For JWT Token
var
Crypto: TCLCrypto;
JWTToken: string;
{
Crypto = TCLCrypto.Create;
try
Crypto.JWT.SetClaim('user', 'reader');
Crypto.JWT.SetClaim('scope', 'reader');
JWTToken = Crypto.JWT.CompactToken('super_secret_key', 256);
ShowMessage('JWT: ' + JWTToken);
finally
Crypto.Free;
}
}