我找不到有关xxhash64的碰撞百分比的任何信息。
我将把它用于缓存系统(生成需要唯一的哈希密钥,大约数亿)。 现在我使用md5,但我不需要加密属性。
所以我需要一些信息,以确定它对我的任务是一个好的决定。 在最好的情况下 - 比较md5和xxHash64之间的冲突次数。
答案 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亿个哈希值,则碰撞概率可以忽略不计。
如果您使用数亿个散列键,则使用md5的冲突概率为0%。
如果您使用xxhash64,
根据这张图片,您可以看到,如果碰撞百分比为50%,您至少需要50亿个哈希值。 50亿个哈希中的两个可以有1/2的奇数来拥有相同的哈希!如果你有大约120亿个哈希值,那么哈希碰撞的几率就达到了100%。
如果您使用数亿个散列键,则使用xxhash64 的冲突概率为0.033%。
这个link解释了为什么md5或快速哈希方法不安全。