因此,我正在研究一个PHP脚本,该脚本查询使用HMAC身份验证标头的API。但是,我一直在试图正确编码HMAC签名。我有一个预先存在的nodejs脚本作为模板工作。PHP - 计算正确的HMAC签名为nodejs脚本
在脚本的NodeJS,所述HMAC签名是使用以下计算:
var crypto = require('crypto');
var hmac = [];
hmac.secret = 'ODc0YTM3YzUxODFlMWQ1YTdhMGQwY2NiZmE1N2Y1ODdjYzM5NTgyMDJhZjVkYTE4MmQxYzQ5ODk0M2QzNWQxYw==';
hmac.timestamp = 1457326475000;
hmac.path = '/account/';
hmac.message = hmac.path +'\n' + hmac.timestamp;
var sig = crypto.createHmac('sha512', new Buffer(hmac.secret, 'base64'));
hmac.signature = sig.update(hmac.message).digest('base64');
console.log(hmac);
这正确计算HMAC的签名: bWjIFFtFmWnj0 + xHLW2uWVa6M6DpbIV81uyUWwRFCJUg + 0Xyt40QWZWQjGvfPUB/JbjGZHUoso0Qv5JHMYEv3A ==。
同时,在PHP中,我使用:
<?php
$hmac['secret'] = 'ODc0YTM3YzUxODFlMWQ1YTdhMGQwY2NiZmE1N2Y1ODdjYzM5NTgyMDJhZjVkYTE4MmQxYzQ5ODk0M2QzNWQxYw==';
$hmac['nonce'] = '1457326475000';
$hmac['path'] = '/account/';
$hmac['message'] = $hmac['path']."\n".$hmac['nonce'] ;
$hmac['signature'] = base64_encode(hash_hmac('sha512',$hmac['message'],
$hmac['secret'], true));
print_r($hmac);
上面的代码,将计算HMAC签名: vqP49m/bk9nA4S3nMqW2r + KC2 + yBfwhY/jWGUfz6dlKJUMkC2ktiPnuCcymdSWl4XezZT5VKCATYfus86Hz /千兆克==
工作从原理上说,“百万只猴子在一百万键盘劈砍而去”也许有一天能够编码有效的HMAC签名,我甚至测试一个循环,通过上面的PHP代码(有/的所有排列不迭代base64编码我秘密有/无HMAC的二进制编码等)......无济于事。
这这里的任何建议,一个疲惫的猿猴?
完美 - 扎哈祝福。 – faustus