【问题标题】:What is a good hashing algorithm for seeding a prng with a string?什么是用字符串播种 prng 的好的散列算法?
【发布时间】:2009-03-24 15:45:53
【问题描述】:

我正在寻找一种散列算法,它产生一个 31/32 位有符号/无符号整数作为 utf8 字符串的摘要,目的是使用输出播种 prng,例如 Park-Miller-Carta LCG 或梅森捻线机。

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

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

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

如果有更好的选择,请告诉我。

【问题讨论】:

    标签: string hash seed prng


    【解决方案1】:

    使用SHA-2

    这是目前最好/最新的散列算法。始终建议使用标准算法。

    【讨论】:

      【解决方案2】:

      如果您要生成 32 位值,请考虑使用经典 CRC32。 FNV 应该是 CRC 的快速替代品,而您的意思是,性能不是问题。

      【讨论】:

        【解决方案3】:

        任何加密的强哈希都将具有您想要的属性,但会生成更多位,但将结果简单截断为 32 位就可以了。我认为加密强度不是实际要求,因此像 MD5 这样有缺陷(但被广泛使用)的哈希方案就足够了 - 并且在许多库中很容易获得。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-03-25
          • 2014-09-16
          • 2015-05-02
          • 2010-09-11
          • 1970-01-01
          • 2015-07-23
          • 1970-01-01
          相关资源
          最近更新 更多