javascript - 对 xxHash 感到困惑

标签 javascript node.js hash

我正在使用 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/

相关文章:

javascript - execCommand "insertBrOnReturn"是如何工作的?

javascript - 如何在显示 block 上使用 ease Out Bounce 动画?

javascript - 我可以使用 val() 插入或编辑文件输入吗?

node.js - 使用 Nodejs over SOAP 和 x509 证书对 Microsoft EWS 进行身份验证

caching - redis本身有缓存吗?

javascript - 计算用户从多个选择中选择了多少个选项

javascript - 如何将每个快速 js 请求包装在域或 trycatch 中

php - 我究竟如何在 PHP 中使用河豚?

c++ - 保持 .exe 时间戳不变

node.js - 请求正文有值(value),但我无法访问它