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

RSA Encrypt with SHA-256 hash function and SHA-256 mask function

See more RSA Examples

How can this Javascript be duplicated using Chilkat?
function a(e, t) {
                var r = s.pki.publicKeyFromPem(e)
                  , n = r.encrypt(t, "RSA-OAEP", {
                    md: s.md.sha256.create(),
                    mgf1: {
                        md: s.md.sha1.create()
                    }
                });
                return s.util.encode64(n)
            }

Note: The OAEP padding uses random bytes in the padding, and therefore each time encryption happens, even using the same data and key, the result will be different -- but still valid. One should not expect to get the same output.

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.StringBuilder,
  Chilkat.Rsa,
  Chilkat.PublicKey,
  Chilkat.Crypt2;

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

procedure RunDemo;
var
  success: Boolean;
  pubkey: TPublicKey;
  sbPem: TStringBuilder;
  bCrlf: Boolean;
  originalData: string;
  crypt: TCrypt2;
  hashBytes: TBytes;
  rsa: TRsa;
  bUsePrivateKey: Boolean;
  encryptedStr: string;

begin
  success := False;

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

  pubkey := TPublicKey.Create;

  sbPem := TStringBuilder.Create;
  bCrlf := True;
  sbPem.AppendLine('-----BEGIN PUBLIC KEY-----',bCrlf);
  sbPem.AppendLine('MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA33TqqLR3eeUmDtHS89qF',bCrlf);
  sbPem.AppendLine('3p4MP7Wfqt2Zjj3lZjLjjCGDvwr9cJNlNDiuKboODgUiT4ZdPWbOiMAfDcDzlOxA',bCrlf);
  sbPem.AppendLine('04DDnEFGAf+kDQiNSe2ZtqC7bnIc8+KSG/qOGQIVaay4Ucr6ovDkykO5Hxn7OU7s',bCrlf);
  sbPem.AppendLine('Jp9TP9H0JH8zMQA6YzijYH9LsupTerrY3U6zyihVEDXXOv08vBHk50BMFJbE9iwF',bCrlf);
  sbPem.AppendLine('wnxCsU5+UZUZYw87Uu0n4LPFS9BT8tUIvAfnRXIEWCha3KbFWmdZQZlyrFw0buUE',bCrlf);
  sbPem.AppendLine('f0YN3/Q0auBkdbDR/ES2PbgKTJdkjc/rEeM0TxvOUf7HuUNOhrtAVEN1D5uuxE1W',bCrlf);
  sbPem.AppendLine('SwIDAQAB',bCrlf);
  sbPem.AppendLine('-----END PUBLIC KEY-----',bCrlf);

  //  Load the public key object from the PEM. 
  success := pubkey.LoadFromString(sbPem.GetAsString());
  if (success = False) then
    begin
      WriteLn(pubkey.LastErrorText);
      Exit;
    end;

  originalData := 'This is the original data to be SHA-256 hashed and RSA encrypted.';

  //  First we SHA-256 hash the original data.
  crypt := TCrypt2.Create;
  crypt.HashAlgorithm := 'SHA-256';

  hashBytes := crypt.HashString(originalData);

  //  Now to RSA encrypt using OAEP padding with SHA-256 for the mask function.
  rsa := TRsa.Create;
  rsa.PkcsPadding := False;
  rsa.OaepHash := 'SHA256';
  rsa.UsePublicKey(pubkey);
  rsa.EncodingMode := 'base64';

  //  Note: The OAEP padding uses random bytes in the padding, and therefore each time encryption happens,
  //  even using the same data and key, the result will be different --  but still valid.  One should not expect
  //  to get the same output.
  bUsePrivateKey := False;
  encryptedStr := rsa.EncryptBytesENC(hashBytes,bUsePrivateKey);
  if (rsa.LastMethodSuccess = False) then
    begin
      WriteLn(rsa.LastErrorText);
      Exit;
    end;

  WriteLn('Base64 RSA encrypted output: ' + encryptedStr);


  pubkey.Free;
  sbPem.Free;
  crypt.Free;
  rsa.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.