C#vs PHP-它们返回不同的HMACSHA256

C#vs PHP-它们返回不同的HMACSHA256,c#,php,.net,hash,hmac,C#,Php,.net,Hash,Hmac,这是我的PHP代码: <?php $sig_string = "GET&https%3A%2F%2Fapi.pinterest.com%2Fv3%2Fusers%2Farchimede%2Fboards%2F&client_id=987654&timestamp=1391761866"; $secret = "123456"; $sig = hash_hmac("sha256", $sig_string, $secret); echo

这是我的PHP代码:

<?php
    $sig_string = "GET&https%3A%2F%2Fapi.pinterest.com%2Fv3%2Fusers%2Farchimede%2Fboards%2F&client_id=987654&timestamp=1391761866";
    $secret = "123456";
    $sig = hash_hmac("sha256", $sig_string, $secret);
    echo $sig;
?>
但它重新运行p5gk7fcrmrxzzv7yyi3b41riypcavk0rwcjwegwtdow=

为什么会有两种不同的结果?C代码有什么问题?

它们是一样的:

.NET C#的结果是
p5GK7FCRmRXzzv7YYi3b41RIyPcaVK0RWCjwegWTD0w=
。这是一个base64字符串

您可以使用例如将其转换为十六进制。转换后,您将获得与PHP相同的结果:


A7918AEC50919915F3CEFED8622DDBE35448C8F71A54AD115828F07A05930F4C

PHP将结果编码为十六进制,c将结果编码为base64。但事实是一样的

更改此行:

Response.Write(Convert.ToBase64String(hashmessage));
为此:

Response.Write(BitConverter.ToString(hashmessage).Replace("-", "").ToLower());

将结果转换为十六进制编码。

那么,如何将结果转换为十六进制?
Response.Write(BitConverter.ToString(hashmessage).Replace("-", "").ToLower());