当前位置: 首页 > news >正文

MD5是哈希,不是加密,防君子不防小人

一、先把概念说清楚

很多开发者在日常交流中习惯说“MD5加密”,这个说法流传太久,以至于不少人真的以为MD5是一种加密算法。实际上,MD5属于哈希(Hash)算法,也叫散列算法或消息摘要算法。

加密和哈希的本质区别在于:

  • 加密是可逆的。明文通过密钥变成密文,持有密钥的人可以把密文还原成明文。

  • 哈希是不可逆的。任意长度的数据输入后,输出固定长度的摘要,无法从摘要反推出原文。

MD5输出的就是一个128位的哈希值,无论输入是一个字符还是一部电影,最终都变成32个十六进制字符。这个过程信息是有损的,所以不可逆。因此,说MD5是“加密”在术语上是不准确的。准确的叫法是:MD5是一种哈希算法,用来生成消息摘要。

二、MD5当年是用来干什么的

MD5由Ron Rivest在1991年设计,初衷主要有两个应用场景:

一是完整性校验。文件下载后算一下MD5,和官方公布的对比,一致就说明文件在传输过程中没有损坏。这里验证的是“有没有被意外改动”,不是“有没有被恶意篡改”——这点后面会说。

二是密码存储。早期很多系统不存明文密码,而是存密码的MD5哈希值。用户登录时把输入的密码算一遍MD5,和数据库里的对比,对上了就放行。这样就算数据库泄露,攻击者拿到的也不是明文密码,而是一串哈希值。

这两个场景在当年看起来是合理的。MD5计算速度快,实现简单,消耗资源少,在上世纪90年代到本世纪初被广泛使用。

三、问题出在哪里

“防君子不防小人”这个比喻确实贴切。

密码存储:太快反而成了致命伤

先说密码存储。MD5的一个核心特征是。快本身不是缺点,但在密码存储场景下就成了致命伤。攻击者拿到泄露的哈希值后,可以直接暴力枚举常用密码,一个个算MD5去比对。算法越快,单位时间内能尝试的密码就越多,破解效率就越高。

GPU让MD5彻底失去抵抗力

这个问题在GPU面前被放大了几个数量级。GPU的设计思路和CPU完全不同——CPU擅长串行处理复杂任务,而GPU拥有数千个计算核心,擅长大规模并行计算。MD5这种算法结构简单、计算步骤规整,恰好特别适合在GPU上并行跑。

一台普通电脑的CPU每秒大概能算几百万次MD5。但一张高端消费级显卡,比如英伟达RTX 4090或更新型号,每秒可以计算数百亿甚至上千亿次MD5。这个数量级的差距,意味着攻击者用一张显卡就能在短时间内穷举完所有常见密码组合。

再配合彩虹表这种预计算技术,常见密码的MD5值早就被算好存起来了,直接查表比对即可,几乎零成本。所以用MD5存密码,在今天的硬件条件下,基本上等于明文存储加了一层窗户纸。

针对这个问题,现在密码存储的标准做法是用慢哈希算法,比如bcrypt、Argon2。这类算法故意把计算过程做得很慢,每次哈希消耗可控但不可忽略的时间和资源。对正常用户来说,登录时多花几十毫秒毫无感觉。但对攻击者来说,暴力破解的成本会从“一张显卡跑几小时”变成“一堆显卡跑几百年”。再加上随机加盐,让同样的密码在不同用户那里生成不同的哈希值,彩虹表就彻底失效了。

完整性校验:碰撞让校验失去意义

再说完整性校验。MD5的另一个致命问题是碰撞。2004年,王小云教授团队公开了MD5的碰撞攻击方法,可以在合理时间内构造出两个内容不同但MD5哈希值完全相同的文件。这意味着攻击者可以准备一个恶意文件,让它和正常文件拥有相同的MD5值。如果系统仅凭MD5来判断文件是否被篡改,是完全可以被绕过的。

2008年,研究人员利用MD5碰撞伪造了CA证书。2012年的Flame恶意软件也用了MD5碰撞来伪造微软的数字签名。这些事件之后,MD5在安全领域的信用已经彻底破产。

2026年的现状:漏洞还在出

即便到了2026年,仍有厂商在使用MD5的安全场景中踩坑。根据美国国家漏洞数据库(NVD)近期的披露:

  • 某厂商路由器的固件中,使用MD5来生成用户会话的cookie,攻击者可以伪造会话直接越权访问设备。

  • 另有电商平台使用时间戳作为种子去跑MD5来生成API的Session ID,由于熵值严重不足,攻击者猜出大概时间就能暴力枚举劫持会话。

这些都不是新问题,只是旧的错误在新的产品上重复出现。

四、那MD5现在还能用吗

能用,但要看场景。

一些不涉及安全的场景,MD5依然可以胜任。比如文件去重,系统只关心两个文件内容是否相同,不担心有人恶意构造碰撞。再比如分布式系统中的数据分片,用MD5做哈希环,只要求分布均匀,不要求抗碰撞。这些场景下MD5计算快、实现简单,仍然是一个可用的选择。

但凡是和安全沾边的场景,都不应该再用MD5。密码存储用bcrypt、Argon2。完整性校验需要防篡改的场景用SHA-256或者带密钥的HMAC。数字签名用SHA-2或SHA-3系列。这些替代方案已经非常成熟,切换成本并不高。

五、总结

MD5是哈希,不是加密。它不可逆,这是和加密的根本区别。

它的历史贡献不小,但在今天的硬件条件和已知攻击面前,它在安全领域已经不具备实用价值。密码存储该换慢哈希算法,完整性校验该换更强的哈希函数。继续在安全场景使用MD5,是给自己留隐患。

http://www.jsqmd.com/news/843214/

相关文章:

  • PSI5协议:汽车传感器同步通信的基石
  • 从源头到治理:光伏并网逆变器直流分量抑制技术全解析
  • 跨平台国密实战:使用sm-crypto在浏览器与Node.js中实现SM2/SM3/SM4
  • RISC-V vs MIPS:同为RISC,指令集设计哲学与编码格式有何不同?
  • 别再为485传感器没文档发愁了!一个USB转485模块+两款免费软件,5分钟搞定Modbus通信测试
  • 用Python和nilmtk库,5分钟上手非侵入式用电分析(附实战代码)
  • 5G网络优化关键参数解读:从入门到实战
  • NotebookLM化学辅助实战手册(附ACS期刊PDF解析模板+分子式自动标注插件)
  • YOLOv5优化 | 注意力融合 | 轻量化CBAM模块的嵌入与性能调优
  • linux技术分享笔记
  • 2026年4月热门的静力切割厂商推荐,建筑物切割/楼板切割/地面切割/建筑拆除/高铁遮板切割,静力切割源头厂家有哪些 - 品牌推荐师
  • Linux Ext 调度器的 BPF 程序集成:用户态与内核态的交互
  • FDE(前沿部署工程师):AI时代年薪百万的新贵,到底值不值得冲?
  • 别再死记硬背公式了!手把手带你用MATLAB/Simulink仿真SVPWM(附模型文件)
  • 在国产UOS系统上搞定Horizon Client for Linux(ARM版)的保姆级安装与排错
  • LTE到5G NR技术演进要点:从4G网优工程师到5G的跨越
  • Linux Ext 调度器的热插拔特性:调度器的动态加载与卸载
  • CST仿真入门实战:Dipole天线结果解读与关键参数分析
  • STM32F429三重ADC+DMA实战:从CubeMX配置到7.2MHz采样率代码调试全流程(避坑指南)
  • IMX6ULL-ALPHA开发板适配uboot2023.04:从官方EVK到自定义板卡的移植实战
  • 微博相册批量下载神器:3分钟学会免费获取高清图片的终极指南
  • AUTOSAR CAN驱动Mailbox配置实战:从Full/Basic CAN到FIFO深度详解
  • 时间序列分类新范式:从ROCKET到MINI ROCKET的演进与实践
  • 蚂蚁百灵 Ring-2.6-1T 开源解析:万亿级思考模型如何实现「按需推理」
  • 【NotebookLM研究问题生成避坑白皮书】:从0到1构建可复现、可评估、可审计的问题生成工作流
  • 泡沫箱码垛(易碎),伯朗特机器人宽幅吸盘+低真空,吸气泡沫箱无压痕
  • 2026年|10款亲测降ai率工具,论文AI率从80%降到10%,内含AIGC免费降重 - 降AI实验室
  • 零代码构建你的AI知识库:让Obsidian笔记开口说话
  • AutoHotKey进阶:文件与路径自动化操作实战
  • Hyper-V装完就完事了?新手必看的Windows 11虚拟机网络与存储配置避坑指南