MD5 哈希值
免费在线 MD5 哈希计算工具,支持文本、文件、批量逐行与 HMAC-MD5 四种模式。可选 UTF-8/Latin1 编码,大写输出与 8 位分组空格。⚠️ MD5 已不安全,请勿用于密码存储。
相关推荐
什么是 MD5?
MD5(Message-Digest Algorithm 5)是由 Ronald Rivest 于 1991 年设计的 128 位哈希函数(RFC 1321),可将任意长度输入转换为固定 32 位十六进制指纹。MD5 曾广泛应用于数字签名、证书验证和密码存储,但 2004 年王小云团队首次演示碰撞攻击,2008 年 Flame 恶意软件利用 MD5 碰撞伪造了 CA 证书,2024 年新研究演示了原像攻击。
**MD5 的安全性状态**:NIST 于 2011 年在 SP 800-131A 中正式废弃 MD5 用于数字签名和安全场景。但 MD5 在非安全场景仍有用武之地:文件完整性校验(验证下载是否损坏)、数据去重、缓存键、日志分析。判断标准:攻击者是否有动机和能力制造碰撞?如果没有,MD5 的速度优势反而是优点。
**MD5 为什么不应用于密码存储**:MD5 计算极快,现代 GPU 可每秒计算数十亿次,配合彩虹表可秒破常见密码。密码存储必须使用 bcrypt、scrypt 或 Argon2 等「慢速哈希」算法——这些算法有可配置的工作因子,使暴力破解成本极高。
**HMAC-MD5 的安全性**:虽然纯 MD5 已被破解,但 HMAC-MD5(基于密钥的哈希消息认证码)在密钥未知的情况下仍然安全,因为 HMAC 的构造方式不直接依赖哈希函数的碰撞抗性。不过仍建议新系统迁移到 HMAC-SHA256。
工具使用纯 JavaScript 实现 MD5 计算(Web Crypto API 已不支持 MD5),所有计算在浏览器本地完成,文件采用分片增量读取不上传服务器。打开开发者工具网络面板可验证零外网请求。
适用场景
- 文件完整性校验:下载软件后计算 MD5,对比官网提供的指纹确认文件未损坏
- 批量摘要生成:一次性生成多条配置文本的 MD5 摘要,用于快速对照表或发布记录
- HMAC-MD5 签名:联调遗留系统时验证密钥与摘要结果(仅用于兼容场景)
- 数据去重分析:用 MD5 快速判断日志或数据中的重复条目
- 缓存键生成:用 MD5 作为短唯一标识,用于缓存或索引系统
- 学习研究:理解哈希算法原理,对比 MD5/SHA1/SHA256 的输出差异
使用方法
- 选择模式:文本(输入字符串)、文件(拖拽上传)、批量逐行(每行独立计算)或 HMAC-MD5
- 设置参数:选择字符编码(UTF-8/Latin1)、大写输出、8 位分组空格
- 输入内容:输入文本、上传文件或粘贴批量内容
- 查看结果:复制哈希结果用于校验、发布说明或脚本使用
功能特点
- 四种计算模式:支持文本、文件、批量逐行与 HMAC-MD5,覆盖常见校验场景
- UTF-8/Latin1 编码可选:切换字符编码以匹配不同系统的哈希输入
- 大写输出与 8 位分组:MD5 结果可切换大写格式,并按 8 位一组插入空格方便阅读
- 文件分片哈希:大文件采用增量读取计算,避免内存溢出,界面始终流畅
- 批量逐行对照:每行文本独立计算,输出「原文 → 哈希值」对照表
- 一键复制结果:哈希值可直接复制到剪贴板
代码示例
JavaScript 中计算 MD5(使用 Web Crypto API 仅支持 SHA,MD5需第三方库)
// 注意:Web Crypto API 不直接支持 MD5(已废弃)
// 生产环境推荐使用 SHA-256 替代
async function sha256(message) {
const msgBuffer = new TextEncoder().encode(message);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
sha256('Hello World').then(console.log);
// a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
// MD5 在 Node.js 中使用 crypto 模块
const crypto = require('crypto');
const md5 = crypto.createHash('md5').update('Hello World').digest('hex');
console.log(md5); // b10a8db164e0754105b7a99be72e3fe5Python 中计算 MD5
import hashlib
# 计算文本 MD5
text = 'Hello World'
md5_hash = hashlib.md5(text.encode('utf-8')).hexdigest()
print(md5_hash) # b10a8db164e0754105b7a99be72e3fe5
# 计算文件 MD5(适用于大文件,分片读取)
def md5_file(filepath, chunk_size=8192):
md5 = hashlib.md5()
with open(filepath, 'rb') as f:
while chunk := f.read(chunk_size):
md5.update(chunk)
return md5.hexdigest()
# HMAC-MD5
import hmac
hmac_md5 = hmac.new(b'secret-key', b'Hello World', hashlib.md5).hexdigest()
print(hmac_md5)Java 中计算 MD5
import java.security.MessageDigest;
import java.nio.charset.StandardCharsets;
import javax.xml.bind.DatatypeConverter;
public class MD5Example {
public static String md5(String input) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : hash) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
System.out.println(md5("Hello World"));
// b10a8db164e0754105b7a99be72e3fe5
}
}
// 注意:Java 推荐使用 SHA-256 替代 MD5
// MessageDigest.getInstance("SHA-256")常见问题
MD5 常用于哪些场景?
MD5 常用于文件完整性校验(如下载包验证)、快速摘要生成、历史系统兼容、缓存键、数据去重等非安全场景。MD5 输出 128 位(32 位十六进制字符),计算速度快,适合对安全性要求不高的校验场景。
MD5 和 SHA256 有什么区别?
MD5 输出 128 位(32 位 Hex),SHA256 输出 256 位(64 位 Hex)。MD5 更快但已被破解;SHA256 未发现实际碰撞攻击,是现代安全场景的首选。
SHA256 工具MD5 为什么不适合密码存储?
MD5 计算速度极快,现代 GPU 每秒可计算数十亿次,且无盐值保护容易被彩虹表破解。密码存储应使用 bcrypt、scrypt 或 Argon2 等慢速哈希算法。
密码生成器MD5 已被破解,还能用吗?
安全场景(数字签名、密码存储、TLS 证书)绝对不能用。但非安全场景(文件校验防 corruption、数据去重、缓存键)中 MD5 仍然可用,因为攻击者没有动机制造碰撞。
MD5 哈希值能被解密吗?
MD5 是单向哈希,理论上不可解密。但通过彩虹表和暴力破解,常见弱密码可以在秒级被找到。这就是为什么不能用 MD5 存密码。
大文件哈希会卡吗?
不会。工具采用分片增量读取,不把整个文件加载到内存,即使数 GB 文件也能流畅计算,界面始终响应。
HMAC-MD5 是什么?和普通 MD5 有什么区别?
HMAC-MD5 是基于 MD5 的消息认证码算法,需要一个密钥作为输入,用于验证消息完整性和真实性。即使 MD5 本身有碰撞问题,HMAC-MD5 在密钥未知的情况下仍然安全(但仍建议迁移到 HMAC-SHA256)。
HMAC 生成器术语表
- 哈希函数(Hash Function)
- 将任意长度输入映射为固定长度输出的数学函数。好的哈希函数具备单向性(无法从输出反推输入)、抗碰撞性(难找两个不同输入产生相同输出)和雪崩效应(输入微小变化导致输出完全不同)。
- 碰撞攻击(Collision Attack)
- 找到两个不同的输入产生相同的哈希输出。MD5 的碰撞攻击已于 2004 年被王小云团队实现,可在数秒内生成碰撞对,导致数字签名可被伪造。
- 原像攻击(Preimage Attack)
- 给定一个哈希输出,找到一个能产生该输出的输入。比碰撞攻击更难,但 MD5 的原像抗性已于 2024 年被新研究大幅削弱。
- 彩虹表(Rainbow Table)
- 预先计算好的哈希值→原文映射表,用于快速破解弱密码哈希。加盐(salt)可以防御彩虹表攻击。
- HMAC(Hash-based Message Authentication Code)
- 基于哈希函数的消息认证码,使用密钥对消息进行认证,防止数据被篡改。HMAC-MD5 和 HMAC-SHA256 是常见变体。HMAC 生成器
- bcrypt
- 专为密码存储设计的慢速哈希算法,内置盐值和可调整的工作因子(cost factor),使暴力破解成本极高。是密码存储的推荐算法之一。
- Checksum(校验和)
- 用于验证数据完整性的小型固定值。MD5、SHA-1、SHA-256 都常用作校验和,通过比对哈希值判断文件是否在传输中损坏。
- 雪崩效应(Avalanche Effect)
- 输入微小变化(哪怕改一个比特)导致输出哈希值发生剧烈且不可预测的变化。MD5 虽然存在碰撞攻击,但其雪崩效应仍然良好,这也是它在非安全校验场景仍然可用的原因。
- RFC 1321
- MD5 算法的官方标准文档,由 Ronald Rivest 于 1992 年提交给 IETF,详细描述了 MD5 的算法步骤和测试用例。
- 分片哈希(Chunked Hashing)
- 处理大文件时,不一次性加载整个文件到内存,而是分块读取并增量更新哈希状态。本工具对大文件采用分片哈希技术,避免内存溢出和界面卡顿。
常见哈希算法对比
| 算法 | 输出位数 | Hex长度 | 安全性 | 速度 | 推荐用途 |
|---|---|---|---|---|---|
MD5 | 128位 | 32字符 | ❌ 已破解(碰撞/原像) | 极快 | 文件校验、去重、缓存键 |
SHA-1 | 160位 | 40字符 | ❌ 碰撞攻击(2017) | 快 | Git、旧系统兼容 |
SHA-256 | 256位 | 64字符 | ✅ 安全 | 中等 | 数字签名、证书、区块链 |
SHA-512 | 512位 | 128字符 | ✅ 安全 | 快(64位CPU) | 高安全场景、密码派生 |
bcrypt | - | 60字符 | ✅ 密码专用 | 慢(可调) | 密码存储 |
MD5 安全事件时间线
| 年份 | 事件 | 影响 |
|---|---|---|
1991 | Ron Rivest 设计 MD5(RFC 1321) | 替代 MD4,成为主流哈希算法 |
1996 | 首次发现 MD5 伪碰撞缺陷 | 学术界开始质疑 MD5 安全性 |
2004 | 王小云团队演示 MD5 碰撞攻击 | MD5 数字签名安全性被彻底打破 |
2008 | Flame 恶意软件利用 MD5 碰撞伪造 CA 证书 | NIST 正式废弃 MD5 用于数字签名 |
2011 | NIST SP 800-131A 正式禁止 MD5 安全用途 | 美国政府系统全面停用 MD5 |
2024 | 新原像攻击论文发布 | MD5 最后防线(原像抗性)被突破 |
Authoritative References
- 安全字符串比较
- 二进制编码解码
- 凯撒密码
- 摩尔斯电码
- 十六进制编码解码
- 视频转 Base64
- Base64 转视频
- 图片转 Base64
- Base64 转图片
- 文本转 Base64
- Base64 转文本
- 文件哈希校验
- 文件转 Base64
- Base64 转文件
- 音频转Base64
- Base64转音频
- AES 加密解密
- DES 加密解密
- Base32 编码解码
- Base58 编码解码
- Base64 编码
- Base64 解码
- Base64 比较
- Base64 拆分
- Base64 多行合并
- Base64 格式化
- Base64 格式校验
- Base64 批量编码
- Base64 批量解码
- Base64 清理
- Base64 填充处理
- Base64 长度统计
- Base64 转十六进制
- Base64 DataURL 转换
- Base64-Hex 互转
- Base85 编码解码
- HMAC 生成与验证
- PBKDF2 密钥派生
- MD5 哈希值
- SHA-256 哈希
- SHA1 哈希
- SHA512 哈希
- JWT 解码、验证与生成
- HTML 编码解码
- Unicode 转义
- URL 编码
- URL Safe Base64
- MIME Base64
- Java 代码混淆
- JavaScript 代码混淆
- PHP 混淆
- Python混淆