jwt-go 生成包: dgrijalva/jwt-go v3.2.0
php base64解析playload出来以后是乱码,查阅了资料发现go的base64加密有两种方式:标准和URL
标准模式加、解密
base64.StdEncoding.EncodeToString(data)
base64.StdEncoding.DecodeString(str)
url编码加、解密
base64.UrlEncoding.EncodeToString(data)
base64.UrlEncoding.DecodeString(str)
然后查看jwt-go源码得知生成jwt用的编码模式是url模式
url模式会将编码中的 '+' 替换成 '-' 将 '/' 替换成 '_', 以防止url转义, 因此 php解析之前也应该先将上述字符替换回去。
/**
* @link https://www.php.net/manual/en/function.base64-decode
*/
function base64url_encode($data, $pad = null) {
$data = str_replace(array('+', '/'), array('-', '_'), base64_encode($data));
if (!$pad) {
$data = rtrim($data, '=');
}
return $data;
}
function base64url_decode($data) {
return base64_decode(str_replace(array('-', '_'), array('+', '/'), $data));
}