从长字符串制作短散列

Make short hash from long string

我有一个很长的字符串,我需要一个唯一的 ID 来缓存它。 id 不需要反转,但是相等的字符串需要 return 相等的 id。

例如:

我不需要反转哈希。

使用 Javascript 实现此目标的最佳方法是什么?

散列越短,冲突的可能性就越高。

然而,在 Java 世界中,有一个字符串 hashCode 帮助器 returns 一个“not如此独特" 字符串中的整数,这是将字符串映射为 ID 的最小方法,但它不能保证唯一性它遭受碰撞.

因此,我强烈建议您在野外使用它,但为了回答起见,您可以在这里了解如何使用这种哈希:

function hashCode(s) {
  for (var h = 0, i = 0; i < s.length; h &= h)
    h = 31 * h + s.charCodeAt(i++);
  return h;
}

另一方面,sha256 是一种“不会遭受碰撞”的单向散列方法(确实如此,但很多小于 MD5、SHA1 或上面的 hashCode),因此虽然结果是一个更长的唯一 ID,但它 kinda 总是按预期工作,并且它是 explained in MDN.

P.S。 NodeJS 15+ 有一个与 Web 相同的 crypto.webcrypto 命名空间,因此您可以在浏览器和服务器中使用相同的代码。