PHP HMAC-SHA1函数不返回“=”作为填充字符?

时间:2014-09-10 17:10:31

标签: php oauth hmacsha1

我正在尝试生成HMAC-SHA1签名,以从Tumblr API请求访问令牌和令牌机密。我在PHP中使用hmac_hash()函数,我的理解是算法应该在签名的末尾产生一个“=”作为填充,但是函数返回给我的签名从来没有填充,我认为是为什么我一直收到来自Tumblr的消息:“oauth_signature与预期值不匹配”。 我尝试使用几个在线签名生成器来测试这个,有些生成填充 有些人不这样做,我现在有点困惑。

这是我的代码:

$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);

1 个答案:

答案 0 :(得分:0)

我需要改变这个: $ signature = hash_hmac(" sha1",$ base_string,$ signing_key);

到此: $ signature = base64_encode(hash_hmac(" sha1",$ base_string,$ signing_key,true));