当前位置: 首页 > 面试题库 >

uniqid有多独特?

呼延衡
2023-03-14
问题内容

这个问题实际上并不是寻找解决方案的问题,而仅仅是出于好奇。PHP
uniqid函数具有一个更熵的标志,以使输出“更唯一”。这让我想知道,当more_entropy为true时(而不是true时),此函数多次产生相同结果的可能性有多大。换句话说,启用more_entropy时与禁用时相比,uniqid的唯一性如何?始终启用more_entropy是否有任何弊端?


问题答案:

2014年3月更新:

首先,必须注意这uniqid是一个误称,因为它不能保证唯一的ID。

根据PHP文档:

警告!

此函数不会创建随机或不可预测的字符串。不得出于安全目的使用此功能。使用加密安全的随机函数/生成器和加密安全的哈希函数来创建不可预测的安全ID。

此函数不会生成加密安全的令牌,实际上,如果未传递任何其他参数,则返回值与microtime()几乎没有什么不同。如果您需要生成加密安全的令牌,请使用openssl_random_pseudo_bytes()。

根据文档,将更多熵设置为true会生成更多唯一值,但是执行时间更长(尽管程度很小):

如果设置为TRUE,则uniqid()将在返回值的末尾添加附加熵(使用组合线性同余生成器),这将增加结果唯一的可能性。

请注意这行increases the likelihood that the result will be unique,并非那会 保证 唯一性。

您可以“无限地”争取唯一性,并使用任意数量的加密例程,添加盐等来增强它-
这取决于目的。

我建议您查看有关主要PHP主题的评论,尤其是:

http://www.php.net/manual/zh/function.uniqid.php#96898

http://www.php.net/manual/zh/function.uniqid.php#96549

http://www.php.net/manual/zh/function.uniqid.php#95001

我的建议是弄清楚 为什么 需要唯一性,这是出于安全性(即添加到加密/加扰例程)吗?另外,它需要 有多
独特?最后,看一下速度注意事项。适应性将随着基本注意事项而变化。



 类似资料:
  • 问题内容: tl; dr Python是否会重用ID?生命周期不重叠的两个对象获得相同ID的可能性有多大? 背景: 我一直在从事一个纯粹用Python 3编写的复杂项目。我一直在测试中看到一些问题,并花了大量时间寻找根本原因。经过一些分析,我怀疑当测试整体运行时(由专门的调度员精心策划并运行),它正在重用某些模拟方法,而不是用其原始方法实例化新对象。为了检查解释器是否正在重用,我使用。 问题: 通

  • 问题内容: php会话ID有多独特?我从阅读过的各种东西中得到的印象是,我不应该依赖永远不会获得相同sessionid的两个用户。它不是GUID吗? 问题答案: Session_id确实可以重复,但是概率很低。如果您的网站访问量不错,那么它可能会在您的网站生命中发生一次,并且只会使一个会话的用户烦恼。 除非您期望建立一个流量很高的网站或为银行业提供服务的服务,否则这并不值得关注。

  • 本文向大家介绍PHP之uniqid()函数用法,包括了PHP之uniqid()函数用法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP中uniqid()函数的用法。分享给大家供大家参考。具体方法分析如下: uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。 注释:由于基于系统时间,通过该函数生成的 ID 不是最佳的。如需生成绝对唯一的 ID,请使用 md5() 函数

  • 问题内容: 是否可以采用以下方式构成的表: 最终变成这样的表: 我已经研究过使用枢轴,但无法使其正常工作。 我目前每个月都使用CROSS APPLY表值函数。 有一个更好的方法吗? 编辑:添加了现有查询-试图简化显示: 功能看起来像 问题答案: 您不需要多个子查询。答案很容易-使用集合理论。从您的第一个表ID / Month / Info1 / Info2轻松合并即可完成ID / Month +(

  • 我试图设置一个独立的Spark2.0服务器来并行处理分析功能。为此,我希望有一个带有多个执行者的工作人员。 我在使用: 独立Spark 2.0 8核 24gig ram Windows server 2008 pyspark(尽管这看起来不相关)

  • 问题内容: 是否可以在JVM中启动和关闭多个H2数据库? 我的目标是通过为每个用户/帐户分配自己的数据库来支持多租户。每个帐户的数据很少。帐户之间的数据永远不会一起访问,比较或分组;每个帐户都是完全独立的。每个帐户每天只能短暂访问一次,一个月只能访问几次。因此,将数据存储在单个数据库中几乎没有什么弊端,但也存在一些严重的弊端。 所以我的想法是,当用户登录特定帐户时,该帐户的数据库已加载。当该用户注