Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
HMAC Hex String
See more Encryption Examples
Demonstrates how to compute an HMAC using a hexidecimal key and data.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.BinData,
Chilkat.Crypt2;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
crypt: TCrypt2;
keyHex: string;
dataHex: string;
bd: TBinData;
macHex: string;
begin
success := False;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
crypt := TCrypt2.Create;
// Set the MAC algorithm to HMAC
crypt.MacAlgorithm := 'hmac';
// Our HMAC key will be the bytes represented in the following hex string.
// In other words, the HMAC key is composed of the bytes 0x41, 0xC2, 0x1C, ...
// (It is not composed of the us-ascii string '4', '1', 'C', ...)
keyHex := '41C21CB9D7A02FC5D4FADB9E4755B9DE';
success := crypt.SetMacKeyEncoded(keyHex,'hex');
// Our desire is to HMAC the bytes represented in the following string:
dataHex := 'C22078065B01460001000000010062043BF5B18228C8E02D17BCFE4E00561FA6DEC216EA97195CEB579942E275C21932258E3CD391E507FF4E7FD4C787A8447DA111C54A9C1795E7FF4C0BAA2EDA';
// We'll need to decode the hex to binary:
bd := TBinData.Create;
bd.AppendEncoded(dataHex,'hex');
// Do the HMAC-SHA256 hash and return as a hex string:
crypt.EncodingMode := 'hex';
crypt.HashAlgorithm := 'sha-256';
macHex := crypt.MacBdENC(bd);
WriteLn(macHex);
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.