0

我需要一个最大长度为 6 且混合了数字和字母的字符串。我检查了:

如何在 PHP 中制作简短的随机唯一键,例如 YouTube 视频 ID?

PHP 生成一个唯一的字符串

这非常有用,但他们制作长度为 10 - 12 的字符串。我的问题是这段代码的输出是否总是唯一的?

base_convert(microtime(false), 6, 36);

或者

base_convert(uniqid('test',true), 6, 36);

注意:我从基数 6 转换,但输入显然不会是基数 6。我这样做是因为如果从 10 转换为 36,它会生成 10-12 的长度。

4

1 回答 1

1

简短的回答:不,但是如果您正在做一些很小的事情,例如个人网站,或者很少有人使用的内部工具,那就没问题了。

长答案:如果您尝试做一些安全的事情,或者使用共享数据库的多个服务器,绝对不会。如果您依赖微时间,攻击者可以准确计算出他们的请求需要多长时间才能到达您的服务器并用他们的请求轰炸它,直到您的服务器生成重复的 ID。uniqid 函数不保证返回 uniq 值(直接来自 php 手册),如果您使用 NTP 更新时间并将您的时间调整到 5 秒前,肯定会生成重复的 ID。

于 2017-02-06T15:58:02.367 回答