Lazarus Pascal
Lazarus Pascal
Example: Hash Text in Chunks
Shows how to generate a final hash, like SHA-256, for a large text by processing it in chunks.Chilkat Lazarus Pascal 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.BinData,
Chilkat.Crypt2;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
crypt: TCrypt2;
bd: TBinData;
s: string;
i: Integer;
encodedHash: string;
begin
success := False;
crypt := TCrypt2.Create;
crypt.HashAlgorithm := 'sha256';
crypt.Charset := 'utf-8';
bd := TBinData.Create;
s := 'The quick brown fox jumped over the lazy dog.' + #13#10;
// Accumulate the text in a StringBuilder. We'll demonstrate hashing the text in chunks,
// and then also hashing the entire text at once to show the results are the same.
bd.AppendString(s,'utf-8');
success := crypt.HashBeginString(s);
i := 0;
while i < 200 do
begin
bd.AppendString(s,'utf-8');
crypt.HashMoreString(s);
i := i + 1;
end;
// Get the hash in base64 format.
crypt.EncodingMode := 'base64';
encodedHash := crypt.HashFinalENC();
WriteLn('Hash computed in chunks: ' + encodedHash);
// Let's alternatively compute the hash of the entire amount of data at once,
// to show the hash computation is the same:
encodedHash := crypt.HashBdENC(bd);
WriteLn('Hash computed in 1 step: ' + encodedHash);
// Output:
// Hash computed in chunks: unwkVff61k40roRIJizaknreScHaL6frWe37kydXbZQ=
// Hash computed in 1 step: unwkVff61k40roRIJizaknreScHaL6frWe37kydXbZQ=
crypt.Free;
bd.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.