0

Security::hash如果在 uuid() 字符串上使用,是否可能发生冲突?我知道 uuid() 会生成真正唯一的字符串,但我需要对它们进行哈希处理,我担心哈希处理后的字符串是否有可能重复。

谢谢

4

2 回答 2

1

首先,与名称相反,uuid 不会创建真正唯一的字符串。它以非常高的概率生成一个唯一的字符串(足够高以至于几乎可以将所有目的视为唯一的)。

至于发生冲突的机会,这实际上取决于您使用的散列算法。假设一个构建良好的散列算法在其输出空间上均匀分布,那么与任何两个散列发生冲突的几率1 / 2^n就是n散列长度(以位为单位)。生日攻击场景中任何两个哈希冲突的几率可以使用公式来近似,p(h) = h^2 / 2 m其中h是您期望生成的哈希数,m是输出空间(例如,在 SHA256 的情况下为 2^256)。

因此,总而言之,无论您使用哪种散列算法,您总是有机会发生散列冲突。但是,对于几乎等于或大于 SHA256 的任何东西,机会都非常小,不值得担心。你最好把时间花在担心下一秒总线在你的服务器上运行的可能性上。

于 2013-08-11T16:30:23.877 回答
0

uuid 可以生成重复,但机会非常非常小。

cakePHP 的 Security::hash 看起来像 PHP 的哈希函数。

如果你将它与 sha512 一起使用,它应该是相当不错的。

于 2013-08-10T18:59:54.213 回答