используя .NET и С#, я должен предоставить строку целостности, используя HMAC SHA512 для PHP-сервера. Использование в С#:
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());
Но это не соответствует PHP hash_hmac() PHP-код:
$hmac = strtoupper(hash_hmac($pbx_hash, $msg, $binKey));
Я пытаюсь изменить кодировку на С# (utf8, ASCII, Unicode). Без успеха.
Я пробовал много решений, найденных в сети, но ничто не дает одну и ту же строку: (
Я не могу изменить PHP-код и не вижу, что не так в С#
Изменить. Это ByteToString
(скопировано из комментария):
static string ByteToString(byte[] buff)
{
string sbinary = "";
for (int i = 0; i < buff.Length; i++)
{
sbinary += buff[i].ToString("X2"); /* hex format */
}
return (sbinary);
}
После многих тэгов найдено, что я получаю те же результаты, если PHP hash_hmac key - это строка, а не байтовый массив. Кажется, проблема связана с функцией преобразования PHP $binKey = pack ( "H *", $keyTest);