using .NET and C# i need to provide an integrity string using HMAC SHA512 to a PHP server .
Using in C# :
Encoding encoding = Encoding.UTF8;
byte[] keyByte = encoding.GetBytes(key);
HMACSHA512 hmacsha512 = new HMACSHA512(keyByte);
byte[] messageBytes = encoding.GetBytes(message);
byte[] hashmessage = hmacsha512.ComputeHash(messageBytes);
return(ByteToString(hashmessage).toUpper());
But it doesn't match with PHP hash_hmac()
PHP code :
$hmac = strtoupper(hash_hmac($pbx_hash, $msg, $binKey));
I try to change encoding in C# (utf8, ASCII,Unicode) Without success.
I've tried many solution found on the net but nothing give the same string :(
I can't change the PHP code, and doesn't see what's wrong in C#
Edit This is ByteToString
(copied from the comment):
static string ByteToString(byte[] buff)
{
string sbinary = "";
for (int i = 0; i < buff.Length; i++)
{
sbinary += buff[i].ToString("X2"); /* hex format */
}
return (sbinary);
}
After many tets, in found that i get the same results if PHP hash_hmac key is a string, not a byte Array . Seems that the problem is with the PHP convert function $binKey = pack("H*", $keyTest);
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…