资讯专栏INFORMATION COLUMN

token 的生成杂谈

willin / 1515人阅读

摘要:背景很多时候我们需要用来作为一些标识比如一个用户登录后的认证标识实现方式的方式自己定义的需要的值这里用随机串作为执行结果看着不是很舒服作为强迫症的我是受不了的的方式执行结果看着稍微舒服些了但是还不够好反观微信的一般是不会有后面的号的优化执行

背景

很多时候我们需要用 token 来作为一些标识, 比如: 一个用户登录后的认证标识.

实现方式 md5 的方式:
$v = 1; // 自己定义的 需要hash 的value 值
$key = mt_rand(); // 这里用 随机串作为key
$hash = md5($key . $v . mt_rand() . time());
echo $hash;

执行结果: b63426a38f86b726ce0d327d48e47376 看着不是很舒服, 作为强迫症的我 是受不了的.

md5 + base64 的方式
$v = 1;
$key = mt_rand();
$hash = md5($key . $v . mt_rand() . time());
$token = base64_encode($hash);
echo $token;

执行结果: MWQyMjE2NmI3NDA1MmRjZTQwOTQzZDZjMWU1OTE5OGU= 看着稍微舒服些了, 但是还不够好, 反观微信的 openid , 一般是不会有后面的 = 号的

优化

$v = 1;
$key = mt_rand();
$hash = md5($key . $v . mt_rand() . time());
$token = str_replace("=", "", base64_encode($hash));
echo $token;

执行结果: Yzg4MWU0OTQ0MTRiZTI0YWYwMDJjOTYyODBkNjFmMTM 这下没有 = 号了, 舒服了些, 但是又太长了, 微信的 openid 可没这么长

换种 hash 试试
sha1 + base64 的方式
$v = 1;
$key = mt_rand();
$hash = hash_hmac("sha1", $v . mt_rand() . time(), $key, true);
$token = str_replace("=", "", base64_encode($hash));
echo $token;

执行结果: 7pn0pWzO+/TOoISNtDaewa4CyuXw 是短些了, 可是里面有 +/ 号, 很多情况下用 get 传递时会被 urlcode, urlcode 过后就这样了 7pn0pWzO%2b%2fTOoISNtDaewa4CyuXw, 这显然不是我们想要的

继续优化
$v = 1;
$key = mt_rand();
$hash = hash_hmac("sha1", $v . mt_rand() . time(), $key, true);
$token = str_replace("=", "", strtr(base64_encode($hash), "+/", "-_"));
echo $token;

执行结果: JM9AkY7SAIROrJ7fhjIU2ApbMsI 这下不会 urlcode了, 看着也舒服些了, 我目前是这样用的...

但是这是不是最优方案呢?

目前没发现什么更好的方案, 只是说出了我认为的比较好的方案

Vue-cli3.0 + Element UI + ThinkPHP5.1 + RBAC权限 + 响应式的后台管理系统

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29077.html

相关文章

  • 【ShareBook】1-后台框架与小程序用户登录接口实战

    摘要:注册流程是从小程序简称,以下替代获取用户的,给到服务器,服务器会用还有自己的等信息一起去微信服务器请求用户数据,注意每一个所对应的用户都是不一样的。 本博客 猫叔的博客,转载请申明出处阅读本文约 5分钟适读人群:Java后端、Java初级、小程序前端 前后端项目的地址 ShareBookServer ShareBookClient 小程序前端 showImg(https://seg...

    zorro 评论0 收藏0
  • 前端知识杂谈

    摘要:整理一些常用前端知识点,忘记的时候可以翻出来回忆下浏览器渲染从输入网址到显示网页的过程分析应用层解析域名客户端先检查本地是否有对应的地址,若找到则返回响应的地址。是高阶函数的一种一个特殊用法。 整理一些常用前端知识点,忘记的时候可以翻出来回忆下 浏览器渲染 从输入网址到显示网页的过程分析 1、应用层DNS解析域名:客户端先检查本地是否有对应的IP地址,若找到则返回响应的IP地址。若没找...

    Cruise_Chan 评论0 收藏0
  • 前端知识杂谈

    摘要:整理一些常用前端知识点,忘记的时候可以翻出来回忆下浏览器渲染从输入网址到显示网页的过程分析应用层解析域名客户端先检查本地是否有对应的地址,若找到则返回响应的地址。是高阶函数的一种一个特殊用法。 整理一些常用前端知识点,忘记的时候可以翻出来回忆下 浏览器渲染 从输入网址到显示网页的过程分析 1、应用层DNS解析域名:客户端先检查本地是否有对应的IP地址,若找到则返回响应的IP地址。若没找...

    lingdududu 评论0 收藏0
  • 前端知识杂谈

    摘要:整理一些常用前端知识点,忘记的时候可以翻出来回忆下浏览器渲染从输入网址到显示网页的过程分析应用层解析域名客户端先检查本地是否有对应的地址,若找到则返回响应的地址。是高阶函数的一种一个特殊用法。 整理一些常用前端知识点,忘记的时候可以翻出来回忆下 浏览器渲染 从输入网址到显示网页的过程分析 1、应用层DNS解析域名:客户端先检查本地是否有对应的IP地址,若找到则返回响应的IP地址。若没找...

    fobnn 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<