token 加密解密

2020-10-10  本文已影响0人  monkeyfly36

\color{red}{eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9}.
\color{green}{eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9}.
\color{blue}{TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ} (三种不同的信息)
第一部分:红色 令牌Header--头部包含所使用的签名算法和令牌的类型
{ "alg": "HS256", "typ": "JWT"} 经过Base64Url 编码以后,结果大致如:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

第二部分:绿色 载荷payload--数据实体
{
data: { username: 'abc', password: '111111' },
exp: 1591933872,
iat: 1591930272
}

//base64解密--将JWT切割   获取需要的载荷
let user = decodeURIComponent(escape(atob(msg.split('.')[1])))
const { exp } = JSON.parse(user)      

注:atob:ASCII-to-Binary 解密-返回一个正常字符串;
btoa:Binary-to-ASCII 加密-返回一个 Base64 表示的字符串

第三部分:蓝色 签名Signature--是对前两部分的防篡改签名。将Header和Payload用Base64URL编码后,再用点(.)连接起来。然后使用签名算法和密钥对这个字符串进行签名。
signature = hmac_sha256(base64encode(header) + '.' + base64encode(payload), 'MY_SUPER_SECRET_KEY')
注:这个密钥(MY_SUPER_SECRET_KEY)只有服务器才知道,不能泄露给用户。

上一篇 下一篇

猜你喜欢

热点阅读