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;