标准 JavaScript 对象哈希表实现中可能发生的冲突?

Err*_*ric 8 javascript algorithm properties hash-function time-complexity

我最近碰巧想到了 JavaScript 中的对象属性访问时间,并遇到了这个问题,它似乎合理地表明它应该是常数时间。这也让我想知道对象属性键长度是否有限制。显然现代浏览器支持长达 2^30 的密钥长度,这对于哈希函数来说似乎相当不错。那说,

  • 有人知道JS引擎使用的哈希函数类型吗?

  • 是否可以通过实验创建 JavaScript 属性访问器的冲突?

Ber*_*rgi 9

有人知道JS引擎使用的哈希函数类型吗?

是的,他们的开发人员当然知道散列函数和他们遇到的问题。事实上,基于哈希冲突的攻击在 2011 年针对多种语言进行了演示,其中包括针对 node.js 服务器的 DOS 攻击。

v8 团队解决了这个问题,您可以在https://v8project.blogspot.de/2017/08/about-that-hash-flooding-vulnerability.html阅读详细信息。

是否可以通过实验创建 JavaScript 属性访问器的冲突?

看起来是这样的:https : //github.com/hastebrot/V8-Hash-Collision-Generator