当前位置: 首页 > 后端技术 > PHP

代币生成杂谈

时间:2023-03-30 04:19:28 PHP

背景很多时候我们需要使用token作为一些标识,例如:用户登录后的认证标识。实现方法md5:$v=1;//需要哈希的自定义值$key=mt_rand();//这里使用随机字符串作为key$hash=md5($key.$v.mt_rand().time());回声$散列;执行结果:b63426a38f86b726ce0d327d48e47376看着不是很舒服,强迫症我受不了$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));回声$令牌;执行结果:Yzg4MWU0OTQ0MTriZTI0YWYwMDJjOTYyODBkNjFmMTM现在没有=号了,舒服多了,就是太长了。微信的openid没那么长。尝试使用另一个哈希值sha1+base64$v=1;$key=mt_rand();$hash=hash_hmac("sha1",$v.mt_rand().time(),$key,true);$token=str_replace('=','',base64_encode($hash));回声$令牌;执行结果:7pn0pWzO+/TOoISNtDaewa4CyuXw比较短,但是里面有个+/号。很多时候在get传递的时候会进行urlcode,urlcode之后就是这样7pn0pWzO%2b%2fTOoISNtDaewa4CyuXw,这显然不是我们要继续优化的$v=1;$key=mt_rand();$hash=hash_hmac("sha1",$v.mt_rand().time(),$键,真);$token=str_replace('=','',strtr(base64_encode($hash),'+/','-_'));回声$令牌;执行结果:JM9AkY7SAIROrJ7fhjIU2ApbMsI现在就没有urlcode了,看着舒服多了。我目前正在这样使用它......但这是最好的解决方案吗?到目前为止我还没有找到更好的解决方案,但我刚刚提到了Vue-cli3,这是我认为更好的解决方案。0+ElementUI+ThinkPHP5.1+RBAC权限+响应式后台管理系统