Witam
Mam do napisania w delphi program który koduje ciąg znaków za pomocą HMAC_512.
Pseudokod w C++ ze sprawdzeniem wygląda następująco:
function hmac_512(msg, sec) {
sec = Base64Decode(sec);
result = hmac(msg, sec, sha512);
return Base64Encode(result);
}
secret = "7pgj8Dm6";
message = "Test\0Message";
result = hmac_512(message, secret);
if (result == "69H45OZkKcmR9LOszbajUUPGkGT8IqasGPAWqW/1stGC2Mex2qhIB6aDbuoy7eGfMsaZiU8Y0lO3mQxlsWNPrw==")
print("Success!");
else
printf("Error: %s", result);
W delphi napisałem coś takiego:
procedure TMainForm.BtnClick(Sender: TObject);
var
mes, secret,test, secretencode : string;
secretdecode, testdecode : Tbytes;
secretpointer : ^Tbytes;
begin
mes:= 'Test\0Message';
secret := '7pgj8Dm6';
secretdecode := DecodeBytes64 (secret);
Secretpointer := @secretdecode;
Edit2.Text := SHA512DigestToHex(CalcHMAC_SHA512(secretpointer, 64, mes, 128));
test2 := CalcHMAC_SHA512(secretpointer, 64, mes, 128);
end;
Funkcja CalcHMAC_SHA512 oblicza wartość HMAC512 i zwraca wartość do recordu:
T512BitDigest = record
case integer of
0 : (Word64s : array[0..7] of Word64);
1 : (Longs : array[0..15] of LongWord);
2 : (Words : array[0..31] of Word);
3 : (Bytes : array[0..63] of Byte);
end;
Jak z tego rekordu mam wyciągnąć wartość EncodeBytes64.
źródło funkcji CalcHMAC_SHA512 wykorzystuje ze strony: https://code.google.com/p/fundamentals/source/browse/trunk/Source/Utils/cHash.pas?r=30