javascript - v8 如何对哈希表中的键进行哈希处理

标签 javascript data-structures hash hashtable v8

学习中how to implement a robust hash table ,我想知道 v8 用于从键创建哈希的算法,以及它们使用什么作为键(对于字符串键)。大多数关于哈希表 key 生成的示例都是 hello world 示例,并且会受到碰撞攻击和其他攻击。我正在寻找生产系统如何实现哈希表的示例,例如 v8。

浏览 v8 source很有帮助,但有点超出我的能力范围。

最佳答案

V8的字符串哈希实现在src/string-hasher-inl.h中,其核心部分是以下函数,该函数将一个新字符“添加”到“运行哈希”中,并在每个字符的循环中调用在字符串中:

uint32_t StringHasher::AddCharacterCore(uint32_t running_hash, uint16_t c) {
  running_hash += c;
  running_hash += (running_hash << 10);
  running_hash ^= (running_hash >> 6);
  return running_hash;
}

根据定义,每个哈希表都可能发生冲突。是否需要考虑冲突攻击取决于应用程序(例如,处理客户端输入的服务器可能希望防范基于冲突的 DoS 攻击;而 Web 浏览器通常不需要关心:客户端脚本是否想要创建无用的 CPU 负载,它可以简单地执行 for (;;) {} ——但为什么任何脚本都想要这样做?)。

针对冲突攻击的一种可能的防御方法是使用随机值(例如在应用程序启动时选择)而不是 0 来初始化(“盐”)每个字符串的“运行哈希”。这样攻击者就无法预测哪些字符串可能具有冲突哈希.

关于javascript - v8 如何对哈希表中的键进行哈希处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48160436/

相关文章:

security - 密码散列、盐和散列值的存储

php - 在Smarty模板引擎中执行MD5函数

javascript - 从 map 对象中设置和删除时确保原始对象的不变性

javascript - 在像数据结构这样的嵌套树中,如何通过父节点的 id 将子节点添加到父节点的子数组中?

C : Store and index a HUGH amount of info! 学校项目

java - Floyd Warshall算法实现

python - python中的快速散列桶到1和n

javascript - 响应式设计 - 如何切换菜单的可见性

javascript - 使用 JavaScript 突出显示父菜单项

循环内的 JavaScript 闭包——简单实用的例子