我在哪里可以找到xxhash64和md5碰撞概率统计数据?

时间:2017-08-21 02:52:21

标签: php hash memcached md5

我找不到有关xxhash64的碰撞百分比的任何信息。

我将把它用于缓存系统(生成需要唯一的哈希密钥,大约数亿)。 现在我使用md5,但我不需要加密属性。

所以我需要一些信息,以确定它对我的任务是一个好的决定。 在最好的情况下 - 比较md5和xxHash64之间的冲突次数。

1 个答案:

答案 0 :(得分:2)

您可以使用birthday problem来计算自己。

通常,给出散列函数概率的数学表达式是:

p(k)= 1 - exp(-k(k-1)/ 2N,k(哈希数)随机生成的值,其中每个值都是小于的负整数N(可能的哈希值):

N = 2 ^(位数),md5的示例为2 ^ 128,或32位哈希为2 ^ 32    

如果您使用md5

将生成128位哈希值,通过应用此公式,您将获得此“S”图。例如,为了获得50%(0.5)的碰撞概率,该图解释了至少需要2100,000万亿个哈希!如果我们使用少于10亿个哈希值,则碰撞概率可以忽略不计。

enter image description here

如果您使用数亿个散列键,则使用md5的冲突概率为0%。

如果您使用xxhash64,

假设xxhash64产生64位哈希。你会得到这个图表。 enter image description here

根据这张图片,您可以看到,如果碰撞百分比为50%,您至少需要50亿个哈希值。 50亿个哈希中的两个可以有1/2的奇数来拥有相同的哈希!如果你有大约120亿个哈希值,那么哈希碰撞的几率就达到了100%。

如果您使用数亿个散列键,则使用xxhash64 的冲突概率为0.033%。

这个link解释了为什么md5或快速哈希方法不安全。

相关问题