当管理员发送带有令牌的链接时(例如我们经常看到的帐户激活或密码更新),我需要访问网站的特定页面以取消注册访问者。这是一种在PHP中创建唯一URL标记的好方法。
显然,令牌必须是唯一的令牌本身将决定什么是可见的访问者(令牌将被存储在MySQL数据库与给定的接入,状态,有效期等)
这是我已经从多个数据源混搭在一起:
$key = '#}~*$/"$?&*(."*/[!%]/${"/}';
$unique = uniqid();
$token = $unique.substr(hash('sha512',$unique.$key.microtime()), 0, 19);
这导致了32个字符的字符串,与第13,可以逆转以获取添加独特的最后19创造了时间和金钱。
这是独一无二的吗?
对于URL令牌,长度足够长。
您将无法颠倒sha512散列来获得创建的时间。 sha512是单向散列。你可以尝试字典攻击自己,以获得创建的时间,但这是非常荒谬的。 – Asaph 2010-10-10 15:40:31
不,我仍然有$独特的未触及,然后SHA512散列substr ... – pnichols 2010-10-10 15:42:32
那么,什么? microtime()'仍然不可逆转地散列,因此永远失去。 – Asaph 2010-10-10 15:44:27