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);