C# 如何在C中获得与PHP单元测试相同的HMAC256结果?

C# 如何在C中获得与PHP单元测试相同的HMAC256结果?,c#,.net,facebook,cryptography,hash,C#,.net,Facebook,Cryptography,Hash,我想我会尝试将新的签名请求逻辑添加到我的facebook画布应用程序中,为了让这对我自己来说“简单”,我在GitHub访问了facebook PHP sdk并查看了 我的实际问题是,我无法使请求中包含的哈希值与我使用应用程序机密计算的哈希值以及请求中发送的数据相匹配 这意味着如何工作,请参见 以下是感谢Rasmus的回答,为帮助其他人,这里有更新的(清理过的代码): 在计算HMAC之前,不应该对有效负载进行base64解码 使用此行: var Hmac = SignWithHMAC(Encodi

我想我会尝试将新的签名请求逻辑添加到我的facebook画布应用程序中,为了让这对我自己来说“简单”,我在GitHub访问了facebook PHP sdk并查看了

我的实际问题是,我无法使请求中包含的哈希值与我使用应用程序机密计算的哈希值以及请求中发送的数据相匹配

这意味着如何工作,请参见

以下是感谢Rasmus的回答,为帮助其他人,这里有更新的(清理过的代码):


在计算HMAC之前,不应该对有效负载进行base64解码

使用此行:

var Hmac = SignWithHMAC(Encoding.GetBytes(Payload), Encoding.GetBytes(ApplicationSecret));
它应该会起作用

还有几点建议:

  • 不要摆弄
    Substring()
    IndexOf()
    尝试使用
  • 你已经改变了YAY和BOO的评论
  • 如果遵循以小写字母开头局部变量名称的通用规则(如:
    var applicationSecret=“…”;
    ),C代码的可读性会更高
    • 谢谢你,詹姆斯! 你的代码帮了我很多

      cdpnet,将Newtonsoft.Json添加到您的项目中,然后如下所示:

              JObject UnencodedPayload = JObject.Parse(Encoding.GetString(ActualPayload));
      

      -凯文

      我要冒险说你是一个几乎不懂C的C/C++程序员。嗨,史蒂文,不是那么新,只是今天让我陷入了一个糟糕的境地。认为堆栈溢出的集体思想可以让我解脱。你是说
      return(HmacBase64==expectedSignature)?如果签名正确,我希望该方法返回true。确实如此-再次感谢Rasmus!我的意思是代码不是惯用的C#,这可能会隐藏一大堆缺陷。为了取得更大的进展,我必须像拉斯穆斯那样开始清理,但可能会更彻底。谢谢拉斯穆斯-感谢你的帮助!如果你不想自己做这一切,就使用Codeplex上的Facebook.NETSDK。它将为您处理签名请求@Nathantetten你能告诉我生成哈希的class.method吗?我有秘密和密钥,我需要生成哈希?没问题Kevin-很高兴它有用。
      
      var Hmac = SignWithHMAC(Encoding.GetBytes(Payload), Encoding.GetBytes(ApplicationSecret));
      
              JObject UnencodedPayload = JObject.Parse(Encoding.GetString(ActualPayload));