生成 UUID 的一致哈希值

Mad*_*uja 5 javascript guid node.js

我想生成 UUID 字符串的一致哈希,例如dcc549d8-bd0c-49c2-bff8-f6fa80fb7857,最好是 0 到 N 之间的数字。

最好、最快的方法是什么?

更新:我正在考虑使用 CRC32。它有什么优点/缺点吗?

jac*_*ack 6

您想要什么样的哈希值?“最佳”选择可能不是最快的,并且取决于您使用哈希的目的。

对于 md5,你可以这样做:

var crypto = require('crypto');

var md5sum = crypto.createHash('md5');
md5sum.update(uuid);
var b64 = md5sum.digest('base64')
Run Code Online (Sandbox Code Playgroud)

然后,如果您需要的话,您可以使用 base64 库将其转换为数字。

节点加密内容,包括可能更适合您的情况的其他哈希算法(md5 速度更快,但安全性较低),记录在此处: https: //nodejs.org/api/crypto.html


Yar*_*nov 5

如果考虑 UUID示例的性质。我会朝那个方向走。

const INIT_NUMBER = 271;

function hash(uuid, N) {
  const x = uuid.split("-").reduce((a,b) => a ^ Number.parseInt(b, 16), INIT_NUMBER) ;
  return arguments.length === 1 ? x : x % N;
}

const a = hash("dcc549d8-bd0c-49c2-bff8-f6fa80fb7857");            
const b = hash("dcc549d8-bd0c-49c2-bff8-f6fa80fb7857", 256);

console.log(a, b);
  
  
Run Code Online (Sandbox Code Playgroud)