使用 .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# 有什么问题
编辑这是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("H*", $keyTest);