什么是 MD5 哈希计算器?
MD5 哈希计算器可对你输入的任意文本计算 128 位 MD5 消息摘要。MD5(消息摘要算法第 5 版,由 RFC 1321 定义)能够接收任意长度的输入,并生成固定长度的 32 位十六进制指纹。相同的输入始终会得到相同的哈希值,而哪怕只改动一个字符,结果也会截然不同。
如何使用
在输入框中键入或粘贴文本,然后提交即可。计算器会先将文本编码为 UTF-8 字节,再运行 MD5 算法,最后返回小写十六进制摘要,同时显示输入的字符数及其对应的 UTF-8 字节大小。如果输入框留空,则会显示众所周知的"空字符串哈希值"。
公式原理详解
MD5 采用 Merkle–Damgård 结构。算法先在消息末尾追加一个 0x80 字节,再补零,直到长度满足"对 64 取模等于 56 字节"为止,最后以 64 位小端格式追加原始消息的位长度。补齐后的消息被切分为多个 512 位的数据块,每个块在四轮共 64 次运算中处理,过程中使用非线性函数、由 sin 推导出的每步常量以及循环左移。四个 32 位状态字(A、B、C、D)会被初始化为固定种子值,并随每个数据块不断更新;将它们最终以小端格式拼接起来,即为摘要结果。
实例演示
空字符串("")的字节数为零。经过补齐后它会变成一个 512 位的数据块,MD5 返回 d41d8cd98f00b204e9800998ecf8427e。而文本 "hello"(5 字节)的哈希值为 5d41402abc4b2a76b9719d911017c592。
常见问题
MD5 安全吗? 不安全。MD5 在密码学上已被攻破——人们可以轻易构造出碰撞。它只适合用作校验和与非安全场景的指纹,切勿用于密码或数字签名。
为什么字节数和字符数不一样? 非 ASCII 字符在 UTF-8 中会占用多个字节,因此一个由 3 个字符组成的表情符号字符串,实际可能有好几个字节。
输入的大小写有影响吗? 有。"Hello" 和 "hello" 会生成完全不同的哈希值。