Einzelnen Beitrag anzeigen

Rolf Frei

Registriert seit: 19. Jun 2006
630 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: HMAC SHA256 und Base64 codierter Schlüssel

  Alt 20. Nov 2019, 12:57
Ich denke du musst deinen Key (skey) zuerst ins binäre Format umwandeln, also nicht einfach den String 1:1 als Bytefolge.

Ich vermute mal dein Key ist ein HEX-String: "23BF70B2A0" (usw.). Hier darfst du nicht einfach die Bytefolge dieses String verwenden sondern muss ihen zuerst binär umwandeln. Mein Beispiel Key "23BF70B2A0" wären also nicht 10 Bytes sondern nur 5 mit den Bytewerten 23, BF, 70, B2 und A0.

Dieses ist ein Beispiel wie ich das mache, aber dieser Code verwendet nicht Indy sondern ein kommerzielles Produkt. Du kannst den Code so also nicht verwenden, aber er soll dir als Hilfe dienen. HexToBin macht die von mir beschriebene Umwandlung des Strings in eine Bytefolge. ByteToHex ist das umgekehrte.
Delphi-Quellcode:
function Create_HMAC_SHA256(const Text, Key: string): string;
var
  mac: TrfMacBase;
  k, b: TrfByteArray;
begin
  k := nil;
  b := nil;
  if (Text = '') or (Key = '') then
  begin
    Result := '';
    Exit;
  end;

  mac := TrfHmacSha256.Create();
  try
    k := HexToBytes(Key); // Umwandlung von String "A1FFB0" in Bytes A1, FF, B0
    b := TrfConverter.GetBytes(Text);

    mac.Initialize(k);
    mac.CreateDigest(b, 0, Length(b));
    Result := LowerCase(BytesToHex(mac.Digest())); // Umwandlung der Bytes A1, FF, B0 in String "A1FFB0"
  finally
    mac.Free();
  end;
end;

Geändert von Rolf Frei (20. Nov 2019 um 14:00 Uhr)
  Mit Zitat antworten Zitat