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

Password_Digest = Base64 (SHA-1 ( nonce + created + SHA-1 (password) ) )

See more Encryption Examples

Demonstrates how to compute:
Password_Digest = Base64 (SHA-1 ( nonce + created + SHA-1 (password)))

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.BinData,
  Chilkat.Prng,
  Chilkat.CkDateTime,
  Chilkat.Crypt2;

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

procedure RunDemo;
var
  password: string;
  crypt: TCrypt2;
  prng: TPrng;
  bd: TBinData;
  dt: TCkDateTime;
  created: string;
  passwordSha1: string;
  passwordDigest: string;

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

  password := 'secret';

  crypt := TCrypt2.Create;
  crypt.HashAlgorithm := 'SHA-1';
  crypt.EncodingMode := 'base64';

  //  Generate a 16-byte random nonce
  prng := TPrng.Create;
  bd := TBinData.Create;
  prng.GenRandomBd(16,bd);

  //  Get the current date/time in a string with this format: 2010-06-08T07:26:50Z
  dt := TCkDateTime.Create;
  dt.SetFromCurrentSystemTime();
  created := dt.GetAsTimestamp(False);
  bd.AppendString(created,'utf-8');

  //  This example wishes to calculate a password digest like this:
  //  Password_Digest = Base64 ( SHA-1 ( nonce + created + SHA-1(password) ) )

  //  First SHA-1 digest the password...
  passwordSha1 := crypt.HashStringENC(password);
  //  Append the 20 binary bytes of the SHA1 hash to bd, which already contains the nonce and created date/time.
  bd.AppendEncoded(passwordSha1,'base64');

  passwordDigest := crypt.HashBdENC(bd);

  WriteLn('Base64 password digest = ' + passwordDigest);


  crypt.Free;
  prng.Free;
  bd.Free;
  dt.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.