我正在使用 xxHash 从元素 id 创建哈希值。我只是不想在网站上显示真实身份。我创建了脚本来测试是否有选项可以获得相同的哈希值:
const _ = require('lodash');
const XXH = require('xxhashjs');
let hashes = []
let uniq_hashes = []
for(let i = 0; i < 1000000; i++){
var h = XXH.h32(i.toString(), 0xABCD).toString(16)
hashes.push(h)
}
uniq_hashes = _.uniq(hashes)
console.log(hashes.length, uniq_hashes.length);
脚本中的日志是1000000 999989
,因此一些哈希值是相同的。 xxHash 的工作方式正确吗?
此外,第一对是“1987”和“395360”
如果我需要真正独特的哈希值(无加密)我应该使用什么?
最佳答案
根据生日悖论,您应该在 1:16^2 或 10^6/2^16 = ~15 左右看到一次碰撞,因此 11 次碰撞似乎是正确的。 (注意:数学被大大简化了,请参阅Birthday problem以获得更好的数学。)
为了减少冲突次数,需要增加散列大小并使用加密散列,例如 SHA-256。加密哈希函数旨在避免冲突。
关于javascript - 对 xxHash 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49403655/