Pascal (Lazarus/Delphi)
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
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.