Sample code for 30+ languages & platforms
Delphi DLL

PKCS7 Sign Text using RSA 2048, SHA256, Base64 Output

See more Digital Signatures Examples

Demonstrates how to sign text using 2048-bit RSA with SHA256, producing PKCS#7 output in Base64. The certificate w/ private key used for signing is loaded from a .p12/.pfx file.

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

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
cert: HCkCert;
crypt: HCkCrypt2;
textToSign: PWideChar;
sigBase64: PWideChar;

begin
success := False;

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

cert := CkCert_Create();

// Load the cert and private key.  Whatever the private key happens to be,
// such as RSA or ECC, then Chilkat will use it.  If the private key is 
// a 2048-bit RSA key, then that's what will be used..
success := CkCert_LoadPfxFile(cert,'qa_data/pfx/myCertAndKey.p12','password');
if (success <> True) then
  begin
    Memo1.Lines.Add(CkCert__lastErrorText(cert));
    Exit;
  end;

crypt := CkCrypt2_Create();

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

// Use SHA-256
CkCrypt2_putHashAlgorithm(crypt,'sha256');

// Hash the utf-8 byte representation of the string
CkCrypt2_putCharset(crypt,'utf-8');

// Return the result in base64
CkCrypt2_putEncodingMode(crypt,'base64');

// Sign some text..
textToSign := 'This is the text to be hashed and signed.';
sigBase64 := CkCrypt2__opaqueSignStringENC(crypt,textToSign);
if (CkCrypt2_getLastMethodSuccess(crypt) <> True) then
  begin
    Memo1.Lines.Add(CkCrypt2__lastErrorText(crypt));
    Exit;
  end;

Memo1.Lines.Add(sigBase64);

// The result:
// MIIS2wYJKoZIhvcNAQc ... zGeeY4Oxg==

CkCert_Dispose(cert);
CkCrypt2_Dispose(crypt);

end;