从C#代码计算API的PHP HMAC SHA1密钥

时间:2014-03-12 01:20:30

标签: c# php api hmacsha1

问题

我试图在PHP中复制以下C#代码。它是API的示例代码,我需要使用PHP5进行交互。

string key = "9c132d31-6a30-4cac-8d8b-8a1970834799";
int developerId = 2;
string url = "/v2/mode/2/line/787/stops-for-line";

// add developer id
url = string.Format("{0}{1}devid={2}",url,url.Contains("?") ? "&" : "?",developerId);
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
// encode key
byte[] keyBytes = encoding.GetBytes(key);
// encode url
byte[] urlBytes = encoding.GetBytes(url);
byte[] tokenBytes = new System.Security.Cryptography.HMACSHA1(keyBytes).ComputeHash(urlBytes);
var sb = new System.Text.StringBuilder();
// convert signature to string
Array.ForEach<byte>(tokenBytes, x => sb.Append (x.ToString("X2")));
// add signature to url
url = string.Format("{0}&signature={1}",url,sb.ToString());

// extra code to add base URL – the resultant url should be:
//  base URL . /v2/mode/2/line/787/stops-for-line?devid=2&signature=D5474F344CDAA7B92F2253169F6C1D66C1A15001

我从中得到的是hmac_hash('sha1','/v2/mode/2/line/787/stops-for-line?devid=2','/v2/mode/2/line/787/stops-for-line?devid=2')需要输出D5474F344CDAA7B92F2253169F6C1D66C1A15001

尝试解决方案

阅读完代码后,我无法发现任何可能暗示非标准哈希例程的明显事件,所以我已经解决了这个问题:

$devID = 2;
$key = '9c132d31-6a30-4cac-8d8b-8a1970834799';
$url = '/v2/mode/2/line/787/stops-for-line?devid=' . $devID;

$my_sign = hash_hmac('sha1', $url, $key, false);

但是,这会将1fd3ac2ec7fe0ea39d7d5ef44a23b89aa7974b41作为哈希值,这显然是不对的。我已经读过base64对密钥进行解码并对结果哈希进行编码有时可能就是伎俩,但遗憾的是并非如此。您可以指向我的任何资源或代码示例将非常感激。

0 个答案:

没有答案