2017-03-03 6 views
0

私はbase64でencondedされたhmacハッシュを生成する関数を使用しようとしています。ただし、エンドポイントはそのメッセージを検証できません。APIでhmac + base64を検証できません。

関数の外でbase64でencondedされたhmacハッシュを生成すると、正常に動作します。エンドポイントはメッセージを検証します。

この

機能を使用するときに私がやっているものです(これは私が必要とそれを動作させることができない方法です):

function genNonce() { 
    list($usec, $sec) = explode(" ", microtime()); 
    $nonce = (int)((float)$usec + (float)$sec); 
    return $nonce; 
} 

function genMsg($nonce) { 
    $signature = strtoupper(base64_encode(hash_hmac('sha256', $nonce . $key, $secret, true))); 
    return $signature; 
} 

$nonce = genNonce(); 
$signature = genMsg($nonce); 

$auth = Array(); 
    $auth[] = "key: " . $key; 
    $auth[] = "nonce: " . $nonce; 
    $auth[] = "signature: " . $signature; 

...execute curl... 

機能と権利を実行するとき、私はVARSをダンプデバッグしようとしましたカールを実行する前に、一致します。だから、それは情報を生成し、それを送信しているようです。

と機能を使用しない場合、これは(これは、それが働いている方法です)私がやっているものです:

list($usec, $sec) = explode(" ", microtime()); 
$nonce = (int)((float)$usec + (float)$sec); 
$signature = strtoupper(base64_encode(hash_hmac('sha256', $nonce . $key, $secret, true))); 

$auth = Array(); 
    $auth[] = "key: " . $key; 
    $auth[] = "nonce: " . $nonce; 
    $auth[] = "signature: " . $signature; 

...execute curl... 

私が間違って何をやっていますか?なぜ私は異なった結果を得ているのですか?エンドポイントAPIの問題ですか?

編集:APIが返すエラーは「INVALID_SIGNATURE」です。私も同じ値を取って、SoapUIから要求を出しました。私は最初のケース(関数)を使用するときに同じエラーが発生し、2番目のケース(外部関数)を使用するとうまく動作します。だから、なぜ関数を使うときに間違ったハッシュを生成するのですか?

答えて

0

私の間違い。

genMsg()に$ keyと$ secretを渡していませんでした。

function genNonce() { 
    list($usec, $sec) = explode(" ", microtime()); 
    $nonce = (int)((float)$usec + (float)$sec); 
    return $nonce; 
} 

function genMsg($nonce, $key, $secret) { 
    $signature = strtoupper(base64_encode(hash_hmac('sha256', $nonce . $key, $secret, true))); 
    return $signature; 
} 

$nonce = genNonce(); 
$signature = genMsg($nonce, $key, $secret); 
関連する問題