• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于PHP中token的生成的解析

php 搞代码 4年前 (2022-01-21) 27次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章给大家分享的内容是关于PHP中token的生成的解析,有一定的参考价值,有需要的朋友可以参考一下。

背景

很多时候我们需要用 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());$t<i>·本2文来源gaodai$ma#com搞$代*码网2</i><strong>搞gaodaima代码</strong>oken = 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了, 看着也舒服些了, 我目前是这样用的…

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

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

相关推荐:

php队列处理:php消息队列实现原理(图文)

如何理解PHP中抽象类和抽象方法?(附代码)

以上就是关于PHP中token的生成的解析的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于PHP中token的生成的解析

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址