jwt token 加解密算法 php 其他语言可以复用的

jwt token 加解密算法 php

jwt 非敏感信息存储在本地。信息可以从token 中获取。双向加密

jwt token 加解密算法 php 其他语言可以复用的

可以看到 token 主要由三部分组成:

  • header:指定了签名算法。
  • payload:可以指定用户 id,过期时间等非敏感数据。
  • Signature:签名,server 根据 header 知道它该用哪种签名算法,再用密钥根据此签名算法对 head+payload 生成签名,这样一个 token 就生成了。

当 server 收到浏览器传过来的 token 时,它会首先取出 token 中的 header+payload,根据密钥生成签名,然后再与 token 中的签名比对,如果成功则说明签名是合法的,即 token 是合法的。

而且你会发现 payload 中存有我们的 userId,所以拿到 token 后直接在 payload 中就可获取 userid,避免了像 session 那样要从 redis 去取的开销。

<?php

    /**
     * token 生成
     * $header 指定了签名算法。
     * $payload 可以指定用户 id,过期时间等非敏感数据。
     * $Signature 签名,server 根据 header 知道它该用哪种签名算法,再用密钥根据此签名算法对 head+payload 生成签名,这样一个 token 就生成了。
     */
    function tokenEncryption($header = [],$payload = [],$salt = ''){
        $header = json_encode($header);
        $payload = json_encode($payload);
        $signature = $header."?".$payload."|".md5($header.$payload.$salt);
        $signature = base64_encode($signature);
        return $signature;
    }
    /**
     * token解密
     * $signature 加密串
     * $slat 密码盐
     */
    function tokenDecrypt($signature,$slat = ''){
        $data = base64_decode($signature);
        $header = json_decode(explode("?",$data)[0],true);
        $payload = json_decode(explode("|",explode("?",$data)[1])[0],true);
        $signature_new = tokenEncryption($header,$payload,$slat);
        if($signature_new != $signature){
            return false;
        }
        return $data;
    }
    $header = [
        'token'=> true,
        'type' => 'md5'
        ];
    $payload = [
        'username'=>'www.z88.jcom',
        ];
    $slat = '8848';    
    $token = tokenEncryption($header,$payload,$slat);
    var_dump($token);
    $str = tokenDecrypt($token,$slat);
    var_dump($str);

运行结果 :
jwt token 加解密算法 php 其他语言可以复用的

原创文章,作者:星辰,如若转载,请注明出处:http://www.z88j.com/39316.html

(19)
打赏 微信扫一扫 微信扫一扫
上一篇 2022年3月1日 下午6:05
下一篇 2022年9月6日 下午9:56

相关推荐

发表回复

登录后才能评论