Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
Generate an RSA Key and Get as Base64 DER
See more RSA Examples
Demonstrates how to generate a 2048-bit RSA key and return the public and private parts as unencrypted Base64 encoded DER.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,
Chilkat.Rsa,
Chilkat.PublicKey;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
rsa: TRsa;
privKey: TPrivateKey;
pubKey: TPublicKey;
bChoosePkcs1: Boolean;
pubKeyBase64Der: string;
privKeyPkcs1: string;
privKeyPkcs8: string;
begin
success := False;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
rsa := TRsa.Create;
// Generate a 2048-bit key.
privKey := TPrivateKey.Create;
success := rsa.GenKey(2048,privKey);
if (success = False) then
begin
WriteLn(rsa.LastErrorText);
Exit;
end;
// Get the public part of the key.
pubKey := TPublicKey.Create;
privKey.ToPublicKey(pubKey);
// There are two possible formats for representing the RSA public key
// in ASN.1 (DER). The possible formats are PKCS1 and PKCS8.
// We can get either by setting bChoosePkcs1 to True or False.
bChoosePkcs1 := True;
pubKeyBase64Der := pubKey.GetEncoded(bChoosePkcs1,'base64');
WriteLn('Public Key Base64 DER:');
WriteLn(pubKeyBase64Der);
// Get the private key as Base64 DER:
// We can get PKCS1 or PKCS8, but with different methods:
privKeyPkcs1 := privKey.GetPkcs1ENC('base64');
WriteLn('Private Key PKCS1 Base64 DER:');
WriteLn(privKeyPkcs1);
privKeyPkcs8 := privKey.GetPkcs8ENC('base64');
WriteLn('Private Key PKCS8 Base64 DER:');
WriteLn(privKeyPkcs8);
rsa.Free;
privKey.Free;
pubKey.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.