2012-04-26 74 views
0

正在使用此函数生成独特的api keies并将其存储到数据库中。有没有可能使用md5生成相同的散列键?

strtoupper(md5(uniqid(rand(), TRUE))); 

是否有可能通过上述函数生成相同的散列键?

+1

使用此:echo strtoupper(md5(date('dmYHisu'))); - 它会做出非常独特的关键&将不会发生冲突 – Frank 2012-04-26 08:21:26

回答

1

即使通过UNIQUEID功能所产生的独特的价值实在是相当独特的,有使用MD5散列算法碰撞时的相当概率(即会导致不同的值相同的散列值)。实际上,US-CERT认为MD5被认为是“加密破坏且不适合进一步使用”,如果您担心碰撞,则应考虑使用SHA256/SHA512算法。

+0

如果我使用这个:echo strtoupper(md5(date('dmYHisu'))); - 它会变得非常独特 - 不会发生碰撞 – Frank 2012-04-26 08:26:41

+0

您也可以使用com_create_guid()方法在php中创建GUID值。然而,从理论上讲,重点仍然是:在数据集足够大的情况下,会出现很大的碰撞概率。实际上,您可能不应该太担心,因为生成的API密钥数量不会超过几十亿:-)。 – BluesRockAddict 2012-04-26 08:38:51

+0

感谢支持@BluesRockAddict – Frank 2012-04-26 11:32:45

2

uniqid基于时间(以毫秒为单位),将其与随机前缀结合使用,极不可能。

请参见下面的详细信息在uniqid: PHP: uniqid - Manual