MD5是什么?在线计算MD5、SHA256哈希值,以及它为什么不能"解密"

下载安装包时官网让你核对一串 64 位的字符,数据库设计时纠结密码字段存什么——都绕不开同一个东西:哈希(Hash)。它不是加密,而是把任意长度的内容压成一份固定长度的"指纹":输入变一个字,指纹就面目全非;但从指纹推不回原文。本文讲清 MD5/SHA 家族的用法、误区,以及"MD5 解密"广告背后的真相。

哈希函数的三个关键性质

  1. 单向:从原文算指纹极快(毫秒级),从指纹反推原文在数学上不可行;
  2. 定长:1 个字和 1GB 文件的 MD5 都是 32 位十六进制,SHA-256 都是 64 位;
  3. 雪崩效应:原文只改一个字,整个指纹完全不同——所以能发现任何细微改动。

MD5、SHA-1、SHA-256,怎么选?

算法长度安全性现状还能用在哪
MD5128 位(32 个十六进制字符)2004 年起可人为构造碰撞,已不安全缓存键、去重指纹等非对抗场景
SHA-1160 位2017 年已实现实际碰撞攻击,浏览器陆续停用其证书同上,逐步淘汰
SHA-256256 位目前无实用攻击,推荐文件校验、签名、区块链等

规则很简单:防"传输出错"用谁都行,防"人为篡改"至少 SHA-256,存密码则一个都不能用(见下文)。

"MD5 解密"是什么?网站声称能解密靠谱吗?

MD5 在数学上不可逆,不存在真正的解密。所谓"MD5 解密网站",原理是预先收录海量"常见原文 → MD5"的对照表(彩虹表),你输入哈希值它去查表——查得到说明原文是 123456、admin 这类弱口令,查不到就束手无策。所以:反查能力强弱,恰恰反映了原文弱不弱。

为什么存密码绝对不能用 MD5?

三个原因叠加:MD5 计算太快,现代显卡每秒可尝试数十亿次;不加盐时相同密码哈希相同,攻破一个等于攻破一片;就算加盐,快的算法也扛不住持续撞库。业界标准是 bcrypt / scrypt / argon2 这类"故意慢、且自动加盐"的密码哈希算法——慢,正是为了安全。

实用场景:验证下载的文件没被篡改

  1. 官网下载页面找到官方公布的 SHA-256 校验值;
  2. 本地计算下载文件的哈希(Windows:certutil -hashfile 文件名 SHA256;macOS/Linux:shasum -a 256 文件名);
  3. 与官方值逐字符比对,一致才安装。校验值一致 ≠ 官方软件无后门,但能保证"你拿到的就是官方发布的那个文件"。
哈希计算(MD5 / SHA) 输入文本即时算出 MD5/SHA-1/SHA-256/SHA-512,全程浏览器本地完成,内容不上传服务器
在线计算哈希

顺带分清一对常被混淆的概念:Base64 是编码不是加密,转换是可逆的、没有密钥;而哈希是单向指纹。需要"可逆地变换格式"用 Base64,需要"验证没被改过"才用哈希。

常见问题(FAQ)

MD5能解密吗?

不能。MD5 是单向哈希函数,数学上不可逆,"MD5解密网站"其实是拿海量"原文→MD5"对照表(彩虹表)反查,只能命中简单常见的原文,复杂一点的原文就查不到。看到"MD5解密"宣传时把它理解为"反查"更准确。

MD5、SHA-1、SHA-256 该用哪个?

校验文件完整性:SHA-256 优先,MD5/SHA-1 只适合防传输出错、防不了人为篡改;密码存储:三者都不行,应使用 bcrypt、scrypt 或 argon2 这类专门的慢哈希;数据指纹、缓存键:MD5 仍广泛使用且够用。

为什么说"MD5加密"这种说法不准确?

MD5 不是加密。加密是可逆的(有密钥能还原原文),而哈希是单向指纹:相同输入永远得到相同输出,但从输出推不回输入,且长度固定(MD5 恒为 32 位十六进制)。准确的说法是"计算 MD5 哈希值"或"MD5 摘要"。

下载文件后怎么用哈希值验证没被篡改?

官方发布页通常会给出文件的 SHA-256 校验值。把下载的文件用本地工具算出哈希,与官方公布值逐字符比对:一致说明文件完整未篡改;不一致则文件损坏或在传输中被掉包,应重新下载。

数据库里存密码为什么不能用MD5?

因为MD5计算太快,攻击者拿到库后每秒可尝试数十亿次撞库;且不加盐时,相同密码的哈希值相同,一破解就是一片。业界标准是 bcrypt/scrypt/argon2 等专为密码设计的慢哈希,并自动加盐。