Encryption Libraries for Delphi: Secure Your Data with Ease”

Alen IBRIC
6 min readMay 20, 2023

As a software engineer, I understand the importance of keeping sensitive data secure. One way to achieve this is through encryption, which is the process of converting plain text into a coded message that can only be read by authorized parties. In this post, I will show you how to use encryption in the Delphi programming language with examples.

Delphi provides several encryption libraries that you can use to secure your data. One of the most popular libraries is the SecureBlackbox library, which supports a wide range of encryption algorithms, including AES, Blowfish, and RSA.

To use the SecureBlackbox library in your Delphi project, you first need to download and install it. Once you have installed the library, you can add it to your project by selecting “Component” from the Delphi menu and then selecting “Install Packages.” From there, you can select the SecureBlackbox package and add it to your project.

To encrypt data using the SecureBlackbox library, you can use the TElSymmetricCrypto class, which provides methods for encrypting and decrypting data using symmetric encryption algorithms such as AES and Blowfish. Here is an example of how to use the TElSymmetricCrypto class to encrypt a string:

var

Crypto: TElSymmetricCrypto;

Input, Output: TMemoryStream;

begin

Crypto := TElSymmetricCrypto.Create();

Input := TMemoryStream.Create();

Output := TMemoryStream.Create();

try

Crypto.Algorithm := SBALGORITHMCNT_AES256;

Crypto.KeyMaterial := SBUtils.BytesOfString(‘mysecretkey’);

Crypto.GenerateIV();

Input.Write(‘Hello, world!’, 13);

Input.Position := 0;

Crypto.Encrypt(Input, Output);

ShowMessage(‘Encrypted data: ‘ + SBUtils.BinaryToString(Output.Memory, Output.Size));

finally

Crypto.Free();

Input.Free();

Output.Free();

end;

end;

In this example, we create an instance of the TElSymmetricCrypto class and set the encryption algorithm to AES-256. We then generate a secret key and an initialization vector (IV) using the GenerateIV method. Finally, we encrypt the input data using the Encrypt method and display the encrypted data in a message box.

To decrypt the encrypted data, you can use the Decrypt method of the TElSymmetricCrypto class. Here is an example of how to decrypt the encrypted data from the previous example:

var

Crypto: TElSymmetricCrypto;

Input, Output: TMemoryStream;

begin

Crypto := TElSymmetricCrypto.Create();

Input := TMemoryStream.Create();

Output := TMemoryStream.Create();

try

Crypto.Algorithm := SBALGORITHMCNT_AES256;

Crypto.KeyMaterial := SBUtils.BytesOfString(‘mysecretkey’);

Input.Write(SBUtils.StringToBinary(‘…’, false), Length(‘…’));

Input.Position := 0;

Crypto.Decrypt(Input, Output);

ShowMessage(‘Decrypted data: ‘ + SBUtils.BinaryToString(Output.Memory, Output.Size));

finally

Crypto.Free();

Input.Free();

Output.Free();

end;

end;

In this example, we create an instance of the TElSymmetricCrypto class and set the encryption algorithm and secret key to the same values as in the previous example. We then decrypt the input data using the Decrypt method and display the decrypted data in a message box.

In conclusion, encryption is an essential tool for securing sensitive data in your Delphi applications. By using the SecureBlackbox library and the TElSymmetricCrypto class, you can easily encrypt and decrypt data using a wide range of encryption algorithms. I hope this post has been helpful in showing you how to use encryption in Delphi.

In addition to the SecureBlackbox library, Delphi also provides other encryption libraries that you can use to secure your data. One such library is the Indy library, which provides support for a wide range of encryption algorithms, including AES, Blowfish, and RC4.

To use the Indy library in your Delphi project, you first need to download and install it. Once you have installed the library, you can add it to your project by selecting “Component” from the Delphi menu and then selecting “Install Packages.” From there, you can select the Indy package and add it to your project.

To encrypt data using the Indy library, you can use the TIdBlockCipherIntercept class, which provides methods for encrypting and decrypting data using block encryption algorithms such as AES and Blowfish. Here is an example of how to use the TIdBlockCipherIntercept class to encrypt a string:

var

Cipher: TIdBlockCipherIntercept;

Input, Output: TMemoryStream;

begin

Cipher := TIdBlockCipherIntercept.Create(nil);

Input := TMemoryStream.Create();

Output := TMemoryStream.Create();

try

Cipher.Cipher := TIdCipherAES.Create(nil);

Cipher.Cipher.InitKey(‘mysecretkey’);

Input.Write(‘Hello, world!’, 13);

Input.Position := 0;

Cipher.Encrypt(Input, Output);

ShowMessage(‘Encrypted data: ‘ + BytesToHex(Output.Memory, Output.Size));

finally

Cipher.Free();

Input.Free();

Output.Free();

end;

end;

In this example, we create an instance of the TIdBlockCipherIntercept class and set the encryption algorithm to AES. We then generate a secret key using the InitKey method. Finally, we encrypt the input data using the Encrypt method and display the encrypted data in a message box.

To decrypt the encrypted data, you can use the Decrypt method of the TIdBlockCipherIntercept class. Here is an example of how to decrypt the encrypted data from the previous example:

var

Cipher: TIdBlockCipherIntercept;

Input, Output: TMemoryStream;

begin

Cipher := TIdBlockCipherIntercept.Create(nil);

Input := TMemoryStream.Create();

Output := TMemoryStream.Create();

try

Cipher.Cipher := TIdCipherAES.Create(nil);

Cipher.Cipher.InitKey(‘mysecretkey’);

Input.Write(HexToBytes(‘…’), Length(‘…’) div 2);

Input.Position := 0;

Cipher.Decrypt(Input, Output);

ShowMessage(‘Decrypted data: ‘ + BytesToString(Output.Memory, Output.Size));

finally

Cipher.Free();

Input.Free();

Output.Free();

end;

end;

In this example, we create an instance of the TIdBlockCipherIntercept class and set the encryption algorithm and secret key to the same values as in the previous example. We then decrypt the input data using the Decrypt method and display the decrypted data in a message box.

Another encryption library that you can use in Delphi is the OpenSSL library, which provides support for a wide range of encryption algorithms, including AES, Blowfish, and RC4.

To use the OpenSSL library in your Delphi project, you first need to download and install it. Once you have installed the library, you can add it to your project by selecting “Component” from the Delphi menu and then selecting “Install Packages.” From there, you can select the OpenSSL package and add it to your project.

To encrypt data using the OpenSSL library, you can use the EVP library, which provides methods for encrypting and decrypting data using symmetric encryption algorithms such as AES and Blowfish. Here is an example of how to use the EVP library to encrypt a string:

var

Cipher: PEVP_CIPHER;

Key, IV: array[0..15] of Byte;

Input, Output: TMemoryStream;

begin

Cipher := EVPaes256_cbc();

Randomize(Key, SizeOf(Key));

Randomize(IV, SizeOf(IV));

Input := TMemoryStream.Create();

Output := TMemoryStream.Create();

try

Input.Write(‘Hello, world!’, 13);

Input.Position := 0;

EVPEncryptInitex(Cipher, nil, @Key[0], @IV[0]);

EVP_EncryptUpdate(Cipher, Output.Memory, Output.Size, Input.Memory, Input.Size);

EVPEncryptFinalex(Cipher, Output.Memory + Output.Size, Output.Size);

ShowMessage(‘Encrypted data: ‘ + BytesToHex(Output.Memory, Output.Size));

finally

Input.Free();

Output.Free();

end;

end;

In this example, we create an instance of the EVPCIPHER structure and set the encryption algorithm to AES-256 in CBC mode. We then generate a secret key and an initialization vector (IV) using the Randomize method. Finally, we encrypt the input data using the EVPEncryptUpdate and EVPEncryptFinalex methods and display the encrypted data in a message box.

To decrypt the encrypted data, you can use the EVPDecryptUpdate and EVPDecryptFinal_ex methods of the EVP library. Here is an example of how to decrypt the encrypted data from the previous example:

var

Cipher: PEVP_CIPHER;

Key, IV: array[0..15] of Byte;

Input, Output: TMemoryStream;

begin

Cipher := EVPaes256_cbc();

Randomize(Key, SizeOf(Key));

Randomize(IV, SizeOf(IV));

Input := TMemoryStream.Create();

Output := TMemoryStream.Create();

try

Input.Write(HexToBytes(‘…’), Length(‘…’) div 2);

Input.Position := 0;

EVPDecryptInitex(Cipher, nil, @Key[0], @IV[0]);

EVP_DecryptUpdate(Cipher, Output.Memory, Output.Size, Input.Memory, Input.Size);

EVPDecryptFinalex(Cipher, Output.Memory + Output.Size, Output.Size);

ShowMessage(‘Decrypted data: ‘ + BytesToString(Output.Memory, Output.Size));

finally

Input.Free();

Output.Free();

end;

end;

In this example, we create an instance of the EVPCIPHER structure and set the encryption algorithm and secret key and IV to the same values as in the previous example. We then decrypt the input data using the EVPDecryptUpdate and EVPDecryptFinalex methods and display the decrypted data in a message box.

In conclusion, Delphi provides several encryption libraries that you can use to secure your data. By using the Indy and OpenSSL libraries, you can easily encrypt and decrypt data using a wide range of encryption algorithms. I hope this post has been helpful in showing you how to use encryption in Delphi.

Here are some encryption libraries that you can use in Delphi:

  1. SecureBlackbox: https://www.eldos.com/sbb/delphi/
  2. Indy: https://www.indyproject/
  3. OpenSSL for Delphi: https://github.com/openssl/openssl/tree/master/util/delphi
  4. SynCrypto: https://synopse.info/fossil/wiki/SynCrypto
  5. DCPCrypt: https://github.com/BeRo1985/dcpcrypt

These libraries provide support for a wide range of encryption algorithms and are compatible with Delphi. I hope you find these resources helpful!

--

--