Hallo zusammen,
ich möchte mit einem Rest-Clienten auf eine
API zugreifen.
Ich habe dafür einen alphanumerischen Key bekommen, der in Base64 codiert ist. Dieser muss zwingend in 64 Bytes decodiert werden bevor ich ihn weiter verwenden kann. Dies mache ich mit:
Code:
TIdDecoderMIME.DecodeBytes
Danach muss mit dem decodierten Key und einem String ein HMAC SHA256 generiert werden. Dafür habe ich folgende Funktion:
Code:
function tform1.CalculateHMACSHA256(const value, skey: String): String;
var
hmac: TIdHMACSHA256;
hash: TIdBytes;
begin
LoadOpenSSLLibrary;
if not TIdHashSHA256.IsAvailable then
showmessage('Error');
hmac := TIdHMACSHA256.Create;
try
hmac.Key := IndyTextEncoding_UTF8.GetBytes(skey);
hash := hmac.HashValue(IndyTextEncoding_UTF8.GetBytes(value));
Result := ToHex(hash);
finally
hmac.Free;
end;
end;
Das Problem ist, dass ich hier meinen Key nicht einsetzen kann ohne ihn in einen String umzuwandeln bzw. ihn gleich in einen String zu decodieren. Dadurch ist er aber nicht mehr brauchbar und das Ergebnis nicht korrekt.
Hat jemand eine Idee um das Problem zu lösen?
Ein alter Beispielkey: 8lzwWMeVNjb0P+oRVlVJZMFWGBgD/9Oq1Yuq8CPga6mX0LGYQ0DWlDNGuF64aYB1bh6jP+Z4/kWQFi/inmf5Qw==