请教一下,我该选择哪一种 hash 算法,用于Nodejs项目?

发布于 1周前 作者 h691938207 来自 nodejs/Nestjs

请教一下,我该选择哪一种 hash 算法,用于Nodejs项目?
我的需求:
将一些 (5000 个以内) 较短 (长度 20 以内) 的字符串映射成整数,转换后的整数将用作数据库中的 id.

我这个数据量应该算小的吧,显然用 md5 太浪费了,但是 hash 算法有好多种,我不知道按照我的需求该选择哪种算法?
要是 npm 上有现成的库就更好了。

13 回复

CRC32 啰,而且本身就是整数,短一些


md5 截短呗,反正除非你特别设计,该碰撞还是要碰撞的,用什么都差不多。

这么简单的,直接手写个算法就行了。

不就是要生成个唯一 id,用作表的索引么,直接附上去一个 uuid

随便找个算法就行,反正该冲突就还是要冲突。
怕冲突就查重然后 UUID

既然用作 id,那肯定不希望冲突。
如果源字符串集固定,不会有新的不确定的字符串加入,那么完美哈希可能是你想要的东西。

如果源字符串集不固定,可以考虑某种可逆的映射,比如各种编码算法 /加密算法。

如果只是为了查找,数据库里 5000 条记录有索引的情况下怎么查差别都不会太大。。。说不定大头在请求吧。

5000……自制映射表吧……
id 自增 id,str
insert into hashes str values (‘xxxx’);
然后需要数字时候去 select 一下

我记着当初上学老师为了说明哈希的概念用的是一种质数算法,然后笑了起来说,大概这就是计算机科学吧

https://www.npmjs.com/package/murmur3hash-wasm
考虑一下 MURMUR3,这玩意比 MD,SHA 系列要快的多,但是相比 CRC32 这种碰撞率要低得多

npm 有现成的实现,有 wasm 的也有 pure-js 的

查表, 数据量不大,完全放一个 js 里面也放得下:
{
1:“abc"
2:“def”
}

因为数据量不大,再放一个反查,同塞一个 js 里面
{
“abc”:1
"def”:2
}

在选择适用于Node.js项目的hash算法时,需要考虑算法的安全性、性能以及具体应用场景。以下是一些建议及代码示例:

常用Hash算法

  • MD5:常用但存在碰撞问题,不推荐用于安全性要求高的场景。
  • SHA-1:较MD5更安全,但近年来也被认为存在潜在安全风险。
  • SHA-256:目前较为推荐的算法,安全性较高,性能也不错。
  • SHA-512:比SHA-256更安全,但性能稍低,适用于对安全性要求极高的场景。

Node.js中Hash算法的使用

在Node.js中,可以使用内置的crypto模块来创建和使用hash实例。以下是一个简单的示例,展示了如何使用SHA-256算法:

const crypto = require('crypto');
const hash = crypto.createHash('sha256');
hash.update('需要加密的字符串');
const encrypted = hash.digest('hex');
console.log(encrypted);

选择建议

  • 如果你的项目对安全性要求不高,可以选择MD5或SHA-1(尽管不推荐)。
  • 对于大多数Node.js项目,SHA-256是一个安全且性能良好的选择。
  • 如果你的项目涉及高度敏感的数据,建议使用SHA-512。

总之,在选择hash算法时,应综合考虑算法的安全性、性能以及项目的具体需求。

回到顶部