首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Lua string hash 算法

我在前一篇文章介绍过下面这 3 个字符串拥有相同的 hash,会导致 Hash Dos 问题:

但是 Lua 并没有将自己的 string hash 算法暴露出来,那应该怎么验证呢?其实翻看 Lua 5.1.4 源码, 中关于 string hash 是这么定义的:

其实这个算法叫 JSHash,这里我用 LuaJIT 的 bit 来实现个:

可以看到上面 3 个字符串的 hash 都是:1777619995

另外需要注意的是 LuaJIT 的 hash 算法和 Lua 是不同的,其是一个 lookup3 的变种。

lookup3 也被暴雪公司使用于解析其各游戏的 MPQ 文件

有关字符串 hash 算法的对比,可以参考下面这两篇文章,写的都比我好:

各种字符串Hash函数比较

如何设计并实现一个线程安全的 Map ?(上篇)

赞赏是对作者最大的支持

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180126G0Y4BI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券