javascript - 从长字符串生成短哈希

标签 javascript node.js encryption hash cryptojs

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

例如:

  • 这是一个非常长的字符串 -> SFG2527G
  • 这是其他东西 -> JSNTFK2783
  • 这是一个非常长的字符串 -> SFG2527G

我不需要反转哈希值。

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

最佳答案

哈希值越短,冲突的机会就越高。

但是,在Java世界中,有一个字符串hashCode助手,它从字符串中返回一个“不太唯一”整数,这是将字符串映射为 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,但它有点总是按预期工作,它是 explained in MDN .

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

关于javascript - 从长字符串生成短哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65824393/

相关文章:

javascript - Node.js 中如何首先执行所有控制台日志?

javascript - Angularjs 在模型更新后不更新 ng-repeat 的 View

javascript - 符号原型(prototype)的字符串表示?

javascript - 如何在 grunt 中压缩文件夹?

java - 如何存储 key 对并在其他类中使用它进行解密?

javascript - 如何在纯 JavaScript 中检测 mousein 和 mouseleave?

javascript - 如何防止 "Error: connect ECONNREFUSED"

javascript - 从 NodeJs 中的函数内保存或返回 REST 服务响应

c - 在 Linux 中从 Bio 结构散列数据

c - openSSL:解密不会产生正确的纯文本