Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Encrypt with Chilkat, Decrypt with OpenSSL

See more OpenSSL Examples

Demonstrates how to RSA encrypt a string using Chilkat, and then shows the corresponding OpenSSL command to RSA decrypt. The OpenSSL command to decrypt is as follows:
openssl rsautl -decrypt -inkey VP_Private.pem -in rsa_encrypted.bin -out original.txt

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.FileAccess,
  Chilkat.Rsa,
  Chilkat.PublicKey;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  rsa: TRsa;
  key: TPublicKey;
  strToEncrypt: string;
  usePrivateKey: Boolean;
  encryptedBytes: TBytes;
  fac: TFileAccess;

begin
  success := False;

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

  rsa := TRsa.Create;

  //  Note: RSA encryption uses the public key.  
  //  RSA decryption uses the private key.
  //  The reason is that the public key can be freely provided to anybody.  This allows anybody
  //  to send an encrypted message to the private key owner, and only the private key owner 
  //  can decrypt.
  key := TPublicKey.Create;

  //  Load an RSA public key from a PEM file:
  success := key.LoadFromFile('qa_data/pem/VP_Public.pem');
  if (success = False) then
    begin
      WriteLn(key.LastErrorText);
      Exit;
    end;

  //  Load the public key into the RSA object.
  success := rsa.UsePublicKey(key);
  if (success = False) then
    begin
      WriteLn(rsa.LastErrorText);
      Exit;
    end;

  strToEncrypt := '00000000;XYZ2-3BHQ-ABCD-MMVV;6MY1-GHJK-9LRR;0';

  //  The LittleEndian property is False by default, but it is set here
  //  anyway to show that LittleEndian byte ordering is required for OpenSSL compatibility.
  rsa.LittleEndian := False;

  usePrivateKey := False;

  encryptedBytes := rsa.EncryptString(strToEncrypt,usePrivateKey);
  if (rsa.LastMethodSuccess = False) then
    begin
      WriteLn(rsa.LastErrorText);
      Exit;
    end;

  //  The OpenSSL command to decrypt would be this:
  //  openssl rsautl -decrypt -inkey VP_Private.pem -in rsa_encrypted.bin -out original.txt

  fac := TFileAccess.Create;
  success := fac.WriteEntireFile('qa_output/rsa_encrypted.bin',encryptedBytes);
  if (success = False) then
    begin
      WriteLn(fac.LastErrorText);
      Exit;
    end;

  WriteLn('RSA Encryption Succeeded.');


  rsa.Free;
  key.Free;
  fac.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.