用字符串播种prng的好的散列算法是什么?

我正在寻找一种哈希算法,该算法将生成31/32位有符号/无符号整数作为utf8字符串的摘要,目的是使用输出来播种prng,例如Park-Miller-Carta LCG或Mersenne-倍捻机。

我研究过FNV1和FNV1a,但它们为最后一个字符不同的相似字符串提供了非常接近的值; 我希望有一个低冲突散列,在对输入字符串进行最小修改后发生根本性变化。 性能不是问题。

我目前的方法是使用字符代码和素数作为乘数的脏LCG:

a = 524287;
for ( i = 0; i < n; i ++ )
a = ( a * string.charCodeAt ( i ) * 16807 + 524287 ) % 2147483647;

请让我知道任何更好的选择。


如果您生成32位值,请考虑使用经典的CRC32。 FNV被认为是CRC的快速替代品,并且你说,性能不是问题。


使用SHA-2

这是最好的/最新的哈希算法。 使用标准算法总是可取的。


任何加密的散列都会有你想要的属性,但是会产生更多的位,但是将结果简单地截断为32位就没有问题。 我认为密码强度并不是一个实际的要求,所以像MD5这样有缺陷的(但广泛使用的)散列方案就足够了 - 并且很容易在许多库中使用。

链接地址: http://www.djcxy.com/p/37297.html

上一篇: What is a good hashing algorithm for seeding a prng with a string?

下一篇: What is the most numerically precise method for dividing sums or differences?