MD5 哈希值
免费在线 MD5 哈希计算工具,支持文本、文件、批量逐行与 HMAC-MD5 四种模式。可选 UTF-8/Latin1 编码,大写输出与 8 位分组空格。⚠️ MD5 已不安全,请勿用于密码存储。
免费在线 MD5 哈希计算工具,支持文本、文件、批量逐行与 HMAC-MD5 四种模式。可选 UTF-8/Latin1 编码,大写输出与 8 位分组空格。⚠️ MD5 已不安全,请勿用于密码存储。
MD5 常用于文件完整性校验(如下载包验证)、快速摘要生成、历史系统兼容、缓存键、数据去重等非安全场景。MD5 输出 128 位(32 位十六进制字符),计算速度快,适合对安全性要求不高的校验场景。
MD5 输出 128 位(32 位 Hex),SHA256 输出 256 位(64 位 Hex)。MD5 更快但已被破解;SHA256 未发现实际碰撞攻击,是现代安全场景的首选。
SHA256 工具MD5 计算速度极快,现代 GPU 每秒可计算数十亿次,且无盐值保护容易被彩虹表破解。密码存储应使用 bcrypt、scrypt 或 Argon2 等慢速哈希算法。
密码生成器安全场景(数字签名、密码存储、TLS 证书)绝对不能用。但非安全场景(文件校验防 corruption、数据去重、缓存键)中 MD5 仍然可用,因为攻击者没有动机制造碰撞。
MD5 是单向哈希,理论上不可解密。但通过彩虹表和暴力破解,常见弱密码可以在秒级被找到。这就是为什么不能用 MD5 存密码。
不会。工具采用分片增量读取,不把整个文件加载到内存,即使数 GB 文件也能流畅计算,界面始终响应。
HMAC-MD5 是基于 MD5 的消息认证码算法,需要一个密钥作为输入,用于验证消息完整性和真实性。即使 MD5 本身有碰撞问题,HMAC-MD5 在密钥未知的情况下仍然安全(但仍建议迁移到 HMAC-SHA256)。
HMAC 生成器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),所有计算在浏览器本地完成,文件采用分片增量读取不上传服务器。打开开发者工具网络面板可验证零外网请求。
| 算法 | 输出位数 | Hex长度 | 安全性 | 速度 | 推荐用途 |
|---|---|---|---|---|---|
MD5 | 128位 | 32字符 | ❌ 已破解(碰撞/原像) | 极快 | 文件校验、去重、缓存键 |
SHA-1 | 160位 | 40字符 | ❌ 碰撞攻击(2017) | 快 | Git、旧系统兼容 |
SHA-256 | 256位 | 64字符 | ✅ 安全 | 中等 | 数字签名、证书、区块链 |
SHA-512 | 512位 | 128字符 | ✅ 安全 | 快(64位CPU) | 高安全场景、密码派生 |
bcrypt | - | 60字符 | ✅ 密码专用 | 慢(可调) | 密码存储 |
| 年份 | 事件 | 影响 |
|---|---|---|
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 最后防线(原像抗性)被突破 |
// 注意: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); // b10a8db164e0754105b7a99be72e3fe5import 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)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")