PHP HMAC-SHA1函数不返回“=”作为填充字符?
问题描述:
我正试图产生一个HMAC-SHA1签名来请求来自Tumblr API的访问令牌和令牌密钥。我在PHP中使用hmac_hash()函数,我的理解是算法应该在签名末尾生成一个“=”作为填充,但函数返回给我的签名从来没有填充,我认为这是为什么我不断收到以下来自Tumblr的信息:“oauth_signature与期望值不符”。 我已经尝试使用几个在线签名生成器来测试这个和一些产生填充 和一些不这样我有点困惑在这一点上。PHP HMAC-SHA1函数不返回“=”作为填充字符?
这里是我的代码:
$params = array(
'oauth_callback' => $callback,
'oauth_consumer_key' => $consumer_key,
'oauth_nonce' => $oauth_nonce,
'oauth_ver' => $oauth_ver,
'oauth_signature_method' => $signature_method,
'oauth_timestamp' => $time
);
ksort($params);
//--------------- build param string
$params;
end($params); // move the internal pointer to the end of the array
$lastkey = key($params);
ksort($params);
$param_string;
foreach($params as $k=>$v) {
$param_string .= rawurlencode(utf8_encode($k))."=".rawurlencode(utf8_encode($v));
if($k != $lastkey) {
$param_string .= "&";
}
};
// --------------- build signature base string
$base_string;
$base_string .= rawurlencode(utf8_encode($http_method))."&";
$base_string .= rawurlencode(utf8_encode($url))."&";
$base_string .= rawurlencode(utf8_encode($param_string));
//------------------ build signing key
$signing_key;
$signing_key .= rawurlencode(utf8_encode($consumer_secret))."&";
//------------------ build the signature
$signature;
$signature = hash_hmac("sha1", $base_string, $signing_key);
答
我需要改变这样的: $签名= hash_hmac( “SHA1”,$ base_string,$ signing_key);
对此: $ signature = base64_encode(hash_hmac(“sha1”,$ base_string,$ signing_key,true));