Sample code for 30+ languages & platforms
Delphi DLL

Encrypt/Decrypt using PFX to produce -----BEGIN PKCS7----- ... -----END PKCS7-----

See more Encryption Examples

First we encrypt using a certificate + public key to produce output such as:
-----BEGIN PKCS7-----
MIIHPwYJKoZIhvcNAQcEoIIHMDCCBywC ...
...
...
-----END PKCS7-----
Then we decrypt using the cert + private key.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, StringBuilder, Cert, Crypt2;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
crypt: HCkCrypt2;
cert: HCkCert;
toBeEncrypted: PWideChar;
encryptedStr: PWideChar;
sb: HCkStringBuilder;
outStr: PWideChar;
bCrlf: Boolean;
decrypt: HCkCrypt2;
decryptedText: PWideChar;

begin
success := False;

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

crypt := CkCrypt2_Create();

// Specify the encryption to be used.
// "pki" indicates "Public Key Infrastructure" and will create a PKCS7 encrypted (enveloped) message.
CkCrypt2_putCryptAlgorithm(crypt,'pki');
CkCrypt2_putPkcs7CryptAlg(crypt,'aes');
CkCrypt2_putKeyLength(crypt,128);
CkCrypt2_putOaepHash(crypt,'sha256');
CkCrypt2_putOaepPadding(crypt,True);

// A certificate is needed as the encryption key.
// Althought the PFX contains the associated private key, we don't need it for encryption.
// (A certificate usually contains the public key by default.)
cert := CkCert_Create();
success := CkCert_LoadPfxFile(cert,'qa_data/pfx/cert_test123.pfx','test123');
if (success <> True) then
  begin
    Memo1.Lines.Add(CkCert__lastErrorText(cert));
    Exit;
  end;

// Tell the crypt object to use the certificate.
CkCrypt2_SetEncryptCert(crypt,cert);

toBeEncrypted := 'This string is to be encrypted.';

// Get the result in multi-line BASE64 MIME format.
CkCrypt2_putEncodingMode(crypt,'base64_mime');

encryptedStr := CkCrypt2__encryptStringENC(crypt,toBeEncrypted);
if (success <> True) then
  begin
    Memo1.Lines.Add(CkCrypt2__lastErrorText(crypt));
    Exit;
  end;

// Make a "-----BEGIN PKCS7-----" ... "-----END PKCS7-----" sandwich...
sb := CkStringBuilder_Create();
CkStringBuilder_AppendLine(sb,'-----BEGIN PKCS7-----',True);
CkStringBuilder_Append(sb,encryptedStr);
CkStringBuilder_AppendLine(sb,'-----END PKCS7-----',True);

outStr := CkStringBuilder__getAsString(sb);

Memo1.Lines.Add(outStr);

// Sample output:

// -----BEGIN PKCS7-----
// MIICXAYJKoZIhvcNAQcDoIICTTCCAkkCAQAxggH0MIIB8AIBADCBrDCBlzELMAkGA1UEBhMCR0Ix
// GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
// Q09NT0RPIENBIExpbWl0ZWQxPTA7BgNVBAMTNENPTU9ETyBSU0EgQ2xpZW50IEF1dGhlbnRpY2F0
// aW9uIGFuZCBTZWN1cmUgRW1haWwgQ0ECEB6M1ZwZdZU7LrAIdurulmUwOAYJKoZIhvcNAQEHMCug
// DzANBglghkgBZQMEAgEFAKEYMBYGCSqGSIb3DQEBCDAJBgUrDgMCGgUABIIBAK/BZG/iXJ8az7zL
// 8EQ77mc+oDPQ4w1hyytK2ip4djkPVvTfYhcoDQ+G/DBU+urJfrVBi5H9gmpXwYyfKlyUxBVRVEJl
// V/V5QQi4JmNTFbmgWh5tp9zDS98l6A2Va4Zs0Wy/owGLfvwitlxd1dsfVAV2hmBYS24BMpNcty5/
// 0atcKYmSou13G78ztTKdMy1tECgZy8kerMsPdDQbSxEZkT3KpQ8C5uEQqYF3bIVaeZzha/Ywieh/
// tvO0T4aAmeJufwkNdVECmU7kuhnNaVPXknFl7jeibTl6zA/VcJKBKcIYT9FRC7KjdooI8q+jtQ/V
// k6RP4POaowkFg1QWRPEWeqIwTAYJKoZIhvcNAQcBMB0GCWCGSAFlAwQBAgQQEEFQduqeJqXQXzy4
// JpkoDoAgdldJDB9zEkpMpgr5/fR2iLvh5kC6BPfhOYjsawBY4Ok=
// -----END PKCS7-----

// ----------------------------------------------------------------------------------------
// Let's Decrypt the above string.

// Start with what was produced above..
CkStringBuilder_Clear(sb);
bCrlf := True;
CkStringBuilder_AppendLine(sb,'-----BEGIN PKCS7-----',bCrlf);
CkStringBuilder_AppendLine(sb,'MIICXAYJKoZIhvcNAQcDoIICTTCCAkkCAQAxggH0MIIB8AIBADCBrDCBlzELMAkGA1UEBhMCR0Ix',bCrlf);
CkStringBuilder_AppendLine(sb,'GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR',bCrlf);
CkStringBuilder_AppendLine(sb,'Q09NT0RPIENBIExpbWl0ZWQxPTA7BgNVBAMTNENPTU9ETyBSU0EgQ2xpZW50IEF1dGhlbnRpY2F0',bCrlf);
CkStringBuilder_AppendLine(sb,'aW9uIGFuZCBTZWN1cmUgRW1haWwgQ0ECEB6M1ZwZdZU7LrAIdurulmUwOAYJKoZIhvcNAQEHMCug',bCrlf);
CkStringBuilder_AppendLine(sb,'DzANBglghkgBZQMEAgEFAKEYMBYGCSqGSIb3DQEBCDAJBgUrDgMCGgUABIIBAK/BZG/iXJ8az7zL',bCrlf);
CkStringBuilder_AppendLine(sb,'8EQ77mc+oDPQ4w1hyytK2ip4djkPVvTfYhcoDQ+G/DBU+urJfrVBi5H9gmpXwYyfKlyUxBVRVEJl',bCrlf);
CkStringBuilder_AppendLine(sb,'V/V5QQi4JmNTFbmgWh5tp9zDS98l6A2Va4Zs0Wy/owGLfvwitlxd1dsfVAV2hmBYS24BMpNcty5/',bCrlf);
CkStringBuilder_AppendLine(sb,'0atcKYmSou13G78ztTKdMy1tECgZy8kerMsPdDQbSxEZkT3KpQ8C5uEQqYF3bIVaeZzha/Ywieh/',bCrlf);
CkStringBuilder_AppendLine(sb,'tvO0T4aAmeJufwkNdVECmU7kuhnNaVPXknFl7jeibTl6zA/VcJKBKcIYT9FRC7KjdooI8q+jtQ/V',bCrlf);
CkStringBuilder_AppendLine(sb,'k6RP4POaowkFg1QWRPEWeqIwTAYJKoZIhvcNAQcBMB0GCWCGSAFlAwQBAgQQEEFQduqeJqXQXzy4',bCrlf);
CkStringBuilder_AppendLine(sb,'JpkoDoAgdldJDB9zEkpMpgr5/fR2iLvh5kC6BPfhOYjsawBY4Ok=',bCrlf);
CkStringBuilder_AppendLine(sb,'-----END PKCS7-----',bCrlf);

decrypt := CkCrypt2_Create();
CkCrypt2_putCryptAlgorithm(decrypt,'pki');

// Use the same cert + private key from the PFX above.
// For decryption, we need the private key.  Given that the certificate was loaded from a PFX,
// we should already have it.
success := CkCrypt2_SetDecryptCert(decrypt,cert);

CkCrypt2_putEncodingMode(decrypt,'base64');
decryptedText := CkCrypt2__decryptStringENC(decrypt,CkStringBuilder__getBetween(sb,'-----BEGIN PKCS7-----','-----END PKCS7-----'));

Memo1.Lines.Add(decryptedText);

CkCrypt2_Dispose(crypt);
CkCert_Dispose(cert);
CkStringBuilder_Dispose(sb);
CkCrypt2_Dispose(decrypt);

end;