如果在uuid()字符串上使用Security::hash
,是否可能发生冲突?我知道uuid()会生成真正独特的字符串,但是我需要对它们进行哈希处理,如果有可能重复哈希字符串,我会担心。
由于
答案 0 :(得分:1)
首先,与名称相反,uuid不会创建真正独特的字符串。它生成一个非常高概率的字符串(足够高,几乎可以将所有目的都视为唯一)。
至于你碰撞的几率,这实际上取决于你使用的散列算法。假设一个精心构建的散列算法在其输出空间上均匀分布,则与任何两个散列冲突的几率为1 / 2^n
,其中n
是以位为单位的散列长度。在生日攻击情形中任意两个哈希碰撞的几率可以使用公式p(h) = h^2 / 2 m
近似,其中h
是您希望生成的哈希数,m
是输出空间(2)例如,在SHA256的情况下为^ 256。
因此,总而言之,无论您使用何种哈希算法,始终都有机会获得哈希冲突。然而,在几乎任何等于或大于SHA256的情况下,机会非常小,不值得担心。您可以更好地花时间考虑下一秒钟公交车在服务器上运行的可能性。
答案 1 :(得分:0)
uuid可以生成重复,但机会非常小。
安全:: cakePHP的哈希看起来像PHP的哈希函数。
如果你在sha512上使用它应该是相当不错的。