PHP HMAC_HASH SHA256返回错误的值



我正在尝试使用PHP中的HMAC256生成JWT。但我注意到响应返回的值无效/不正确。我比较了JWT网站上的价值https://jwt.io/#debugger-io这就是为什么我说这是不正确的。

$token = '*******-****-****-****-*********';

$header = array(
"alg" => "HS256",
"typ" => "JWT"
);

$header = json_encode($header);
$header = base64_encode($header);
$payload = array(
"id" => "XXXX"
);
$payload = json_encode($payload);
$payload = base64_encode($payload);
$payload = str_replace('==', '', $payload);
$toHash = $header .'.'. $payload;
$signature = hash_hmac('sha256', $toHash, $token, true);
$signature = base64_encode($signature);
// yzt9U/pSc+PFnXHqKIvMDEkMhlUnVL6RuNtqciAPsXw= (Token generated in PHP)
// yzt9U_pSc-PFnXHqKIvMDEkMhlUnVL6RuNtqciAPsXw (Token generated in JWT website)

令牌应与JWT中生成的令牌相同。

我在这里为大家发布我的答案。

public function base64url_encode($data) {
$data = str_replace(array('+', '/'), array('-', '_'), base64_encode($data));
return $data;
}

最新更新