哈希与安全

MurmurHash 生成器

计算任意文本的 32 位或 128 位 MurmurHash3 哈希。

给这个工具评分

如何使用 MurmurHash 生成器

  1. 在输入框中键入或粘贴您的文本。
  2. 选择变体——32 位适合大多数哈希表场景。
  3. 哈希值会随输入实时显示;点击“复制”即可获取。

关于 MurmurHash 生成器

MurmurHash3 由 Austin Appleby 创建,对整整一代基础设施代码来说,它成了“用什么来哈希我的键”这个问题的默认答案。它的名字来源于其内部循环——乘、旋转、乘、旋转——在输入的各个数据块上重复执行这几条低开销的 CPU 指令,最后再通过一个终结化步骤让比特产生雪崩效应。它既不是校验和,也不是密码学哈希:它是一种分布式哈希,专为把键变成能够均匀散布到各个桶中的数字而设计,这正是它在哈希表和布隆过滤器中如此常见的原因。

各变体的名称需要解释一下,因为其中两个看起来可以互换,实则不然。murmur3a 是 32 位版本,输出 8 个十六进制字符。murmur3cmurmur3f 是 128 位版本,都输出 32 个十六进制字符,但它们是两种独立的算法——一个针对 32 位 x86 CPU 优化,另一个针对 64 位 x64 优化——而且对同一个输入会产生完全不同的输出。它们不是同一种哈希的两种实现;选错变体不会与你要对接的另一个系统匹配。如果你要与另一个工具或库比对哈希值,就必须使用它所用的确切变体。

除非有特殊理由,否则请选择 32 位:它速度最快,而且 8 个字符对于普通分桶场景已绰绰有余。当你需要哈希非常庞大的键集合、希望意外碰撞变得极其罕见,或者需要一个用于去重的紧凑标识符时,再升级到 128 位变体。它们都无法抵御攻击者——MurmurHash3 的碰撞可以被蓄意构造出来,而针对未加防护地使用它的服务发起的哈希洪泛攻击,是真实且已有记录的问题。对于任何具有对抗性的场景,请改用 SHA-256;即便是 MD5,破解难度也与它不在同一个量级。

常见问题

murmur3c 和 murmur3f 有什么区别?

两者都是 128 位,都输出 32 个十六进制字符,但它们是不同的算法——murmur3c 针对 x86 优化,murmur3f 针对 x64 优化。同一输入会得到不同的结果,所以你必须选择对方系统所使用的确切变体。

我应该选择哪个变体?

普通哈希表和分桶场景请使用 32 位 MurmurHash3。当你拥有庞大的键集合,或者需要一个意外碰撞必须极其罕见的紧凑 ID 时,再使用 128 位变体。

MurmurHash 安全吗?

不安全。它是一种快速的分布式哈希,不具备任何抗攻击能力——碰撞可以被蓄意构造,这一点已被用于哈希洪泛式拒绝服务攻击。切勿将它用于密码、签名或篡改检测。

MurmurHash 适合用在什么地方?

哈希表、布隆过滤器、分片、分区和缓存键——任何你需要键快速且均匀分布、且没有人试图操纵结果的场景。

我的文本会被发送到别处吗?

您的文本会被发送到我们的服务器进行哈希计算,因为浏览器无法计算 MurmurHash。计算完成后会立即丢弃——绝不记录,绝不存储。