C # эквивалентно hash_hmac в PHP

используя .NET и C # мне нужно предоставить строку целостности, используя HMAC SHA512 для PHP-сервера. Использование в 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());

Но это не соответствует PHP hash_hmac () Код PHP:

$hmac = strtoupper(hash_hmac($pbx_hash, $msg, $binKey));

Я пытаюсь изменить кодировку в C # (utf8, ASCII, Unicode) без успеха.

Я пробовал много решений, найденных в сети, но ничего не выдает ту же строку :(

Я не могу изменить код PHP и не вижу, что не так в C #

Edit Это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 является строкой, а не байтовым массивом. Кажется, проблема в PHP-функции преобразования $ binKey = pack (& quot; H * & quot ;, $ keyTest);

Ответы на вопрос(3)

Ваш ответ на вопрос