2014-09-10 25 views
0

我正試圖產生一個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); 

回答

0

我需要改變這樣的: $簽名= hash_hmac( 「SHA1」,$ base_string,$ signing_key);

對此: $ signature = base64_encode(hash_hmac(「sha1」,$ base_string,$ signing_key,true));