Sample code for 30+ languages & platforms
Delphi DLL

Encrypt a File to a PKCS7 (CMS) Message

Shows how to encrypt a file into a PKCS7 encrypted message using the recipient's certificate. Public-key encryption requires no private key. However, the recipient's private key is necessary for decryption.

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, BinData, Cert, Crypt2;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
crypt: HCkCrypt2;
cert1: HCkCert;
fileData: HCkBinData;

begin
success := False;

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

crypt := CkCrypt2_Create();

// Load the recipient's digital certificate. 
// We don't need the private key for encryption.
// Only the public key is needed (which is included in a certificate).
cert1 := CkCert_Create();
success := CkCert_LoadFromFile(cert1,'qa_data/user1/cert_user1.pem');
// Assume success for the example, but make sure your application checks for success/failure...
CkCrypt2_SetEncryptCert(crypt,cert1);

// Indicate that we want PKI encryption (i.e. public-key infrastructure)
// to produce a CMS message (Cryptographic Message Syntax/PKCS7),
// that is be created with RSAES-OAEP padding, SHA256, and AES-256 for the
// bulk encryption.
CkCrypt2_putCryptAlgorithm(crypt,'pki');
CkCrypt2_putPkcs7CryptAlg(crypt,'aes');
CkCrypt2_putKeyLength(crypt,256);
CkCrypt2_putOaepHash(crypt,'sha256');
CkCrypt2_putOaepPadding(crypt,True);

// Load the file to be encrypted...
fileData := CkBinData_Create();
success := CkBinData_LoadFile(fileData,'qa_data/jpg/penguins.jpg');
// Your app should check for success/failure..

// Encrypt the data.  The contents of the fileData object are replaced with the PKCS7 encrypted message.
success := CkCrypt2_EncryptBd(crypt,fileData);
if (success <> True) then
  begin
    Memo1.Lines.Add(CkCrypt2__lastErrorText(crypt));
    Exit;
  end;

// Save the PKCS7 encrypted message to a file..
success := CkBinData_WriteFile(fileData,'qa_output/pkcs7_encrypted.p7');

Memo1.Lines.Add('OK.');

CkCrypt2_Dispose(crypt);
CkCert_Dispose(cert1);
CkBinData_Dispose(fileData);

end;