将PHP HMAC SHA256转换为C#

时间:2017-08-04 06:44:21

标签: c# php vb.net

我需要在C#中转换以下PHP代码:

$hash = hash_hmac('SHA256',"ent",'key',true);
echo rtrim(strtr(base64_encode($hash), '+/', '-_'), '=');

我使用以下C#代码:(FROM HERE

private static string hmacSHA256(String data, String key)
{
    using (HMACSHA256 hmac = new HMACSHA256(Encoding.ASCII.GetBytes(key))) {
        byte[] a2 = hmac.ComputeHash(Encoding.ASCII.GetBytes(data));
        string a3 = Convert.ToBase64String(a2).ToString.Replace("+", "-").Replace("/", "_").Replace("=", "");
        return a3;
    }
}

但结果并不相同。

  

PHP结果:Xt0hGF_wcArzx4urxfbHUpOp2eEXvtGTDekGtQw5JTo

     

c#results:FnM4gpRRlapTZcO5iAIlEXEqU5iFT1hYcmQ1rY7ZINE

1 个答案:

答案 0 :(得分:1)

我刚刚测试了你的代码并且它们工作正常。我通过了abcdefghsecretkey作为参数,他们给出了相同的结果。

如果您在询问之前检查了实际输入,那将会很好。

C#代码(fiddle):

Console.WriteLine(hmacSHA256("abcdefgh", "secretkey"));

输出:

  

d2AI63oXm2Q5VDCCjLvBrwKr-gT6vZcizD6BCq1rRjc

PHP代码(make the fiddle yourself):

<?php
    $hash = hash_hmac('SHA256',"abcdefgh",'secretkey',true);
    echo rtrim(strtr(base64_encode($hash), '+/', '-_'), '=');
?>

输出:

  

d2AI63oXm2Q5VDCCjLvBrwKr-gT6vZcizD6BCq1rRjc


您的问题存在于其他地方。