2012-04-26 81 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