← 退出

MD5 加密

文本 MD5 哈希值计算

MD5 (32 位十六进制)
—

MD5 已被证明存在碰撞风险,不建议用于密码存储等安全敏感场景,仅适合文件校验、去重等一般用途。文件计算完全在浏览器本地进行,不会上传。

关于MD5 加密

MD5 是一种把任意长度的数据压缩成 128 位摘要的哈希算法,通常写成 32 位十六进制字符串。本工具提供两种模式:在「文本」模式下,输入一段文字,立即得到它的 MD5;在「文件」模式下,选择任意一个文件,计算整个文件内容的 MD5。常见用途是核对下载文件有没有损坏或被替换、给内容做简单的去重标识。需要先说清楚:MD5 早已被证明存在碰撞问题,不能用于存储密码或做任何安全签名,页面底部也有同样的提示。另外,哈希是单向的,本工具只能计算 MD5,不能把 MD5 反推回原文。

操作步骤

  1. 顶部有「文本」和「文件」两个切换按钮,默认是「文本」模式。
  2. 文本模式:在「输入文本」框里输入或粘贴内容,下方「MD5 (32 位十六进制)」会随着输入实时更新,点复制按钮即可复制结果。输入框为空时结果显示为「—」。
  3. 文件模式:点击虚线框「点击选择任意文件」,选好文件后框内会显示文件名,下面先显示「计算中…」,算完变成 32 位十六进制结果,同样可以复制。
  4. 要和官方给出的校验值对比,把两串字符放在一起逐位核对即可。MD5 十六进制不区分大小写,本工具输出的是小写字母。

一个实际算出来的例子

文本 hello 的 MD5 是 5d41402abc4b2a76b9719d911017c592。把首字母改成大写变成 Hello,结果完全不同:8b1a9953c4611296a827abf8c47804d7,这说明哪怕只改一个字符,摘要也会彻底变化。中文也可以:你好 的 MD5 是 7eca689f0d3389d9dea66ae112e5cfd7。上面三个值都用 Node.js 自带的 MD5 与本工具使用的算法逐一交叉核对过,结果一致。

支持范围与已知限制

  • 文本按 UTF-8 编码后再计算,所以中文、表情符号都能得到与大多数编程语言和命令行工具一致的结果。注意换行符也是内容的一部分:同一段话用 Windows 的 CRLF 换行和 Linux 的 LF 换行,MD5 是不同的;末尾多一个空格或回车也会改变结果。
  • 输入为空时界面显示「—」,不会显示空字符串的 MD5 值。
  • 只输出 32 位小写十六进制,没有大写切换,也没有 SHA-1、SHA-256 等其他算法。
  • 文件计算在浏览器主线程里进行,先把整个文件读入内存再计算(补位时只多占用一份同样大小的缓冲区),所以体积很大的文件(几百 MB 以上)仍可能让页面卡顿较长时间,甚至因内存不足而失败。检查大文件时建议使用系统自带的命令行工具。
  • 一次只能选一个文件,不支持文件夹和批量,也没有内置的「粘贴官方校验值自动比对」功能。
  • 文件读取失败时会弹出提示「文件读取失败,请重试」。选择文件后,文件选择框会被重置,所以想重新计算同一个文件需要再次点选。

常见问题:MD5 能用来保存密码吗?

不能。MD5 计算极快,而且已经有成熟的碰撞构造方法和海量的彩虹表,攻击者可以很快把常见密码的 MD5 反查出来。存储密码应使用专门设计的慢速算法(如 bcrypt、scrypt、Argon2)并加盐,而不是 MD5。

常见问题:MD5 可以「解密」吗?

严格说不能,因为哈希是单向的,原文信息已经被压缩丢弃。网上所谓的「MD5 解密」其实是拿预先算好的常见字符串对照表去查。本工具不提供这类反查,只做正向计算。

常见问题:我算出的值和官方提供的不一样,怎么办?

先确认是不是在文本模式下误输入了内容:校验下载文件要用「文件」模式并选择文件本身,而不是粘贴文件名。其次确认下载是否完整、是不是选错了版本。如果是对文本做校验,留意末尾有没有多余的空格、换行,以及换行符是 CRLF 还是 LF。这些看不见的字符都会让摘要不同。

常见问题:为什么相同文本在不同工具里算出的结果有时不同?

最常见的原因是字符编码或换行符不同。本工具把文本按 UTF-8 编码;如果对方工具用 GBK 等其他编码处理中文,结果就会不同。纯英文和数字在常见编码下字节相同,通常不会有这个问题。

常见问题:MD5 还有哪些合理用途?

对非对抗场景仍然够用,例如确认文件传输过程中有没有因网络问题损坏、给文件或文本生成一个简短的指纹用于去重、核对某些老系统仍在使用 MD5 的校验值。凡是需要防止他人恶意篡改的场合,都应改用 SHA-256 或更新的算法。

隐私与处理方式

MD5 由页面里的一段 JavaScript 在你的浏览器本地计算,文本和文件内容都不会被上传,也不会被保存,代码中没有任何网络请求。选择的文件只是被浏览器读入内存用于计算,关闭或刷新页面后即被释放。