前言:很多时候我们需要对数据进行加密解密,比如解析token等 这个时候我们就需要对其进行数据操作,而不同平台的加密解密方法也是不一样的,这里我做一下记录。
我们先来了解一下 jwt 全称是JSON WEB TOKEN
JWT是用于用户与服务器之间身份认证的密码。 这个“密码”的作用简单来说就是一个:就是告诉服务器当前用户是谁。
用户登录后,服务端根据一定的规则,生成TOKEN。后续用户在每次请求时,将TOKEN携带上一起发送给服务器。
JWT 一般由三部分构成 分别是header、payload以及signature
header: 一般是一些固定的信息
{
'typ': 'JWT', // 声明类型
'alg': 'HS256' // 声明加密的算法 通常是 SHA256 HMAC
}
payload:信息的主要载体,也可以是空的,返回的一些个人信息一般也是放在这
{
avatarUrl: "https://thirdwx.qlogo.cn/mmopen/vi_32/jLcwsTs1QkicaJnMGt2vP7LaXUtIq8Q7bsRWIk2jTetG3agwoRRDEFAHEIgibDR5IqrztukRYp9waWNX58SjujZQ/132"
city: ""
country: ""
gender: 0
language: "zh_CN"
nickName: "Demons."
province: ""
}
signature:服务器用于验证该请求的token是否合法
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
根据自己的规则算法生成的一串例如这样的字符串
= = = = = = = = = = = = = = = = = = = = = = = 分割 = = = = = = = = = = = = = = = = = = = = = = =
接下来就是不同端对于token的解析
h5 pc
let token = res.data.token.split('.')
// 通过split()方法将token转为字符串数组
// 这样得到的长度为3的数组 分别就是 header、payload 以及signature
// 我们可以通过访问数组下标的方式拿到主要存数据的payload 再进行解析 -----
// 格式化数据
token = token[1].replace(/-/g, "+").replace(/_/g, "/")
let userinfo = JSON.parse(decodeURIComponent(escape(window.atob(token))));
// 这样就能到到我们需要的信息的json数据
在h5 pc我们能用到window 但在小程序里没有这玩意 这个时候atob() 这个方法就不适用了
就需要用到其他的方法
微信小程序
// 进行分割+格式化
let token = res.data.token.split('.')
let userinfo = token[1].replace(/-/g, '+').replace(/_/g, '/')
// 解码base
let info = new Buffer(userinfo, 'base64').toString('utf8')
// 得到的这个info就是解析后的json对象
console.log("info》》》》》",info)
原创码字不易,如果你觉得对你有帮助的好劳烦你动动你的小手点个赞,当然关注收藏三连就更好了!!!^_^!