天天看點

hmac sha256 php,PHP中的HMAC-SHA-256

我必須從這個字元串建構一個autorisation哈希:

kki98hkl-u5d0-w96i-62dp-xpmr6xlvfnjz:20151110171858:b2c13532-3416-47d9-8592-a541c208f755:hKSeRD98BHngrNa51Q2IgAXtoZ8oYebgY4vQHEYjlmzN9KSbAVTRvQkUPsjOGu4F

此秘密用于HMAC哈希函數:

LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=

我必須生成的autorisation哈希是這樣的:

P-WgZ8CqV51aI-3TncZj5CpSZh98PjZTYxrvxkmQYmI=

有一些事情要照顧:

>簽名必須使用RFC 2104中指定的HMAC-SHA-256建構.

>簽名必須使用RFC 4648 Section 5(安全字母表)中指定的Base64 URL相容進行編碼.

還有一些給代的僞代碼:

Signatur(Request) = new String(encodeBase64URLCompatible(HMAC-SHA-256(getBytes(Z, "UTF-8"), decodeBase64URLCompatible(getBytes(S, "UTF-8")))), "UTF-8")

我在PHP中嘗試了各種各樣的東西,但還沒有找到正确的算法.這是我現在的代碼:

if(!function_exists('base64url_encode')){

function base64url_encode($data) {

$data = str_replace(array('+', '/'), array('-', '_'), base64_encode($data));

return $data;

}

}

$str = "kki98hkl-u5d0-w96i-62dp-xpmr6xlvfnjz:20151110171858:b2c13532-3416-47d9-8592-a541c208f755:hKSeRD98BHngrNa51Q2IgAXtoZ8oYebgY4vQHEYjlmzN9KSbAVTRvQkUPsjOGu4F";

$sec = "LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=";

$signature = mhash(MHASH_SHA256, $str, $sec);

$signature = base64url_encode($signature);

if($signature != "P-WgZ8CqV51aI-3TncZj5CpSZh98PjZTYxrvxkmQYmI=")

echo "wrong: $signature";

else

echo "correct";

它給出了這個簽名:

K9lw3V-k5gOedmVwmO5vC7cOn82JSEXsNguozCAOU2c=

如您所見,44個字元的長度是正确的.請幫助我找到錯誤,這個簡單的問題花了我幾個小時,沒有解決方案.