Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
Export an Encrypted PKCS #8 Private Key as PEM
See more Private Key Examples
Demonstrates the Chilkat PrivateKey.GetPkcs8EncryptedPem method, which exports the key as password-protected PKCS #8 PEM (-----BEGIN ENCRYPTED PRIVATE KEY-----). The only argument is the password; the cipher is selected by the Pkcs8EncryptAlg property.
Note: The file paths are relative to the application's current working directory. Absolute paths may also be used. Supply the paths appropriate to your own environment.
Background: This is the safe way to export a key for storage or transfer — the private material is encrypted under a passphrase, so a leaked file is not immediately usable. It is the format to reach for whenever a key leaves your process. Control the encryption cipher with
Pkcs8EncryptAlg, and source the password securely rather than hard-coding it.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.PrivateKey;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
privKey: TPrivateKey;
password: string;
pem: string;
begin
success := False;
// Load a private key to export.
privKey := TPrivateKey.Create;
success := privKey.LoadPemFile('qa_data/private.pem');
if (success = False) then
begin
WriteLn(privKey.LastErrorText);
Exit;
end;
// The key password is not hard-coded in a real application; obtain it from an interactive
// prompt, environment variable, or a secrets vault.
password := 'myKeyPassword';
// Export as password-protected PKCS #8 PEM ("-----BEGIN ENCRYPTED PRIVATE KEY-----"). The
// encryption cipher is selected by the Pkcs8EncryptAlg property.
pem := privKey.GetPkcs8EncryptedPem(password);
if (privKey.LastMethodSuccess = False) then
begin
WriteLn(privKey.LastErrorText);
Exit;
end;
WriteLn(pem);
privKey.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.