常用工具及查询🤖 AI 导航HOT寒霜启示录游戏工具攻略文章关于

MD5 和哈希是什么:文件校验、密码存储和常见误解

作者:冰原老猫 · 发布:2026-10-22 · 分类:开发入门

广告位(预留,AdSense 审核通过后启用)

下载软件时,官网常在下载链接旁边写着一串 SHA-256 值;数据库里的用户密码字段是一串看不懂的字符;网上还有人说“MD5 已经被破解了”。这些都和“哈希”有关。这篇文章用尽量少的数学,讲清哈希是什么、能做什么、不能做什么。

一、哈希函数的四个特点

哈希函数把任意长度的数据变成一个固定长度的“指纹”。比如 SHA-256 无论输入是一个字还是一个 4 GB 的文件,输出都是 256 位,通常写成 64 个十六进制字符。好的哈希函数有这些特点:

  1. 确定性:同样的输入,永远得到同样的输出。
  2. 雪崩效应:输入改动一个字符,输出几乎完全不同。
  3. 单向:从输出无法反推出输入。
  4. 抗碰撞:很难找到两个不同的输入得到相同输出。

例如字符串 abc 的 MD5 是 900150983cd24fb0d6963f7d28e17f72,SHA-256 是 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad。这两个值是公开的标准测试向量,你可以用任何哈希工具验证。

二、哈希不是加密,也不是编码

说“把密码 MD5 加密”其实不准确,应该说“对密码做哈希”。

三、用途一:校验文件完整性

下载大文件后,计算它的哈希,与官网公布的值比对,一致就说明文件没有在下载过程中损坏,也没有被替换(前提是官网页面本身可信,并通过 HTTPS 访问)。

# Windows(PowerShell)
Get-FileHash .\setup.exe -Algorithm SHA256
# macOS
shasum -a 256 setup.dmg
# Linux
sha256sum setup.iso

比对时不必逐个字符看,复制两个值到文本工具里查找,或者只要有一个字符不同,整串就会差别很大,比较开头和结尾各 8 位基本就能发现问题,但严谨起见应完整比对。

四、为什么 MD5、SHA-1 不再安全

MD5 输出 128 位,SHA-1 输出 160 位。研究人员早已找到构造 MD5 碰撞的实用方法,2017 年也公开了 SHA-1 的实际碰撞实例。这意味着攻击者可以制造两个内容不同但哈希相同的文件。因此:

五、用途二:存储密码

网站不应保存用户的明文密码,而是保存密码的哈希值,登录时把用户输入的密码同样做哈希再比对。但直接用 MD5 或 SHA-256 存密码是不够的:

  1. 彩虹表:常见密码的哈希值早已被大量预先计算好,查表即可反查。
  2. 速度太快:通用哈希函数设计得很快,攻击者用显卡每秒能尝试海量密码。

正确做法是使用专门的密码哈希算法,如 Argon2、bcrypt、scrypt 或 PBKDF2。它们会:

主流编程语言和框架都有现成的实现,直接使用即可,不要自己设计“MD5 套 MD5”之类的方案。

六、其他常见用途

七、常见误解

八、在线计算哈希

本站新增了 哈希计算工具,可以计算文本或本地文件的 MD5、SHA-1、SHA-256、SHA-384、SHA-512,并与给定值比对。文件在浏览器中本地读取计算,不会上传。哈希结果经常需要和 Base64 互转(例如某些接口用 Base64 表示 SHA-256),可以配合 Base64 编解码工具 使用。

广告位(预留,AdSense 审核通过后启用)

相关站内工具

同类文章

← 全部文章