我想使用身份验证令牌,经过各种搜索后,我发现了JWT令牌和另一种使用md5的令牌生成方法。
出于各种原因,我不想使用令牌JWT,在我看来md5的信誉不好。
所以我找到了一种方法,但是我想请您发表意见:
生成字节字符串:https://www.php.net/manual/en/function.random-bytes.php
然后我将其转换为十六进制。
最后,我将其与用户ID和Salting连接起来。
我将其发送到我的应用程序(Android或Web),而不是在对服务的请求期间对接收到的令牌进行解码,然后我将看到包含在ID中的令牌隐藏在令牌中。 因此,很难通过蛮力找到令牌吗?
注1:我想在将来刷新令牌,但目前应该无限期地发行。
注2:我不想仅在php中使用库或框架。
代码:
$bytes = random_bytes(32);
$part=bin2hex($bytes));
$shortpart=substr($part,0,17);
$id = #userid
$salt=#customsalt
$token=shortpart.$id.$salt;
示例:
$shortpart =f2e4d1f2a2dfedcf5
$id=1
$salt=4d2ze121
$token=f2e4d1f2a2dfedcf514d2ze121
用户或黑客不知道ID是否隐藏在令牌中。
答案 0 :(得分:0)
在数据库表中为时间添加一列,并将authtoken计算为:
$time = time();
并将其存储到数据库中。
加密:
$encrypt = base64_encode($time.userid);
解密:
从表中获取时间:
$decrypt = base64_decode($encrypt);
检查this链接。
答案 1 :(得分:0)
经过研究,我认为更好的方法是:
$token = bin2hex(openssl_random_pseudo_bytes(32));
并自定义此字符串。