如何生成人类可读的访问代码?

时间:2017-08-08 15:59:20

标签: php laravel token laravel-5.4

我正在PHP / Laravel中构建一个在线邮件投票系统,该系统需要一个人在某个时候输入的访问令牌,无论是实际用户还是管理员。因此,我认为必须生成令牌,并且不能通过数据库转储追溯回原始用户。

生成此类代码的最佳方法是什么?我已经看过Hashids,但不确定这是否是一个合适的解决方案,除非可以将选票创建时间戳(以秒为单位)作为第二个值与选票ID一起使用。

2 个答案:

答案 0 :(得分:0)

最好的一个,也是最快的一个:

$token = bin2hex(openssl_random_pseudo_bytes(int));

二进制安全和加密安全,但如果你想要获得所需的长度,你必须削减这个然后你将获得更轻松的钩子令牌只有16个字符。如果你想得到人类可靠的字符串你必须自己实现它,这是很长的路。我使用加密安全扩展SafeToken制作了类似的内容。

答案 1 :(得分:0)

使用CSPRNG创建一个随机字节数组,例如openssl_random_pseudo_bytes,然后Base58对结果进行编码。这将为唯一性级别提供最短的人类可用字符串。

Base58一个非常人性化的字符集,没有容易混淆的字符。这种用法的一个例子是比特币。

这是字符集:
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz