在哪里可以找到 xxhash64 和 md5 冲突概率统计信息?

Where can I find xxhash64 and md5 collision probability statistics?

我找不到任何关于 xxhash64 冲突百分比的信息。

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

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

您可以使用 birthday problem.

自行计算

一般来说,给出哈希函数概率的数学表达式是:

p(k) = 1 - exp(-k(k-1)/2N, k (number of hashes) randomly generated values, where each value is a non-negative integer less than N (number of possible hashes):

N = 2^(number of bit), example for md5 it is 2^128, or 2^32 for 32 bit-hash

如果使用md5

将产生一个 128 位的散列值,通过应用这个公式你可以得到这个 'S' 图。该图说明,例如,为了获得 50%(0.5)的碰撞概率,您至少需要 21 000 000 万亿的哈希值或 21 quintillion 的哈希值!!!!如果我们使用少于,例如10亿个哈希,则冲突的可能性可以忽略不计。

如果使用亿级散列键,使用md5碰撞概率为0%。

如果使用xxhash64,

假设 xxhash64 产生一个 64 位散列。你会得到这个图表。

根据这张图可以看出,如果碰撞百分比为50%,则至少需要50亿的哈希值。 50 亿个哈希中的两个可以有 1/2 的奇数具有相同的哈希!如果您有大约 120 亿个哈希值,则哈希值发生冲突的可能性为 100%。

如果使用亿级散列键,使用xxhash64.

碰撞概率为0.033%

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