MD5 在线加密 & SHA / HMAC 哈希计算器

支持文本的 MD5 (16/32位大小写)、SHA-1、SHA-256、SHA-512 以及带密钥的 HMAC 哈希即时计算。纯本地浏览器执行,安全无痕。

客户端本地计算 · 绝对隐私
开发者特惠 阿里云官方合作专区

阿里云爆款云服务器 · 开发者上云特惠 99元/年起

2核2G/2核4G 高性能轻量服务器、OSS 对象存储与云数据库限时特价,专属通道直达优惠。

输入待哈希明文 (Plain Text):
HMAC 签名密钥 (选填):

常见哈希算法特性与安全性对比

了解各种哈希散列算法的输出长度、抗碰撞能力与现行行业安全推荐等级。

算法名称输出位长 (Bit)十六进制长度 (Hex)抗碰撞安全性推荐适用场景
MD5128 bit32 字符已被攻破 (不推荐高密)非安全校验、文件快速去重、缓存 Key
SHA-1160 bit40 字符存在理论碰撞风险Git Commit SHA(历史遗留)、兼容旧系统
SHA-256256 bit64 字符极高 (行业黄金标准)SSL/TLS 证书、区块链交易校验、数字签名
SHA-512512 bit128 字符极高 (军事级安全)超高安全凭据、长哈希密码散列衍生
HMAC-SHA256256 bit64 字符极高 (结合对称秘钥)API 签名鉴权、开放平台防重放与篡改校验

常见编程语言哈希计算代码速查

主流后端语言中生成 MD5、SHA-256 与 HMAC-SHA256 的标准示例。

Python (hashlib)标准库
import hashlib, hmac

# MD5 & SHA256
md5 = hashlib.md5(b"hello").hexdigest()
sha256 = hashlib.sha256(b"hello").hexdigest()

# HMAC-SHA256
sig = hmac.new(b"secret", b"hello", hashlib.sha256).hexdigest()
Node.js (crypto)内置模块
const crypto = require('crypto');

// SHA256
const hash = crypto.createHash('sha256').update('hello').digest('hex');

// HMAC-SHA256
const hmac = crypto.createHmac('sha256', 'secret').update('hello').digest('hex');
Golang (crypto/sha256)标准库
import (
    "crypto/sha256"
    "encoding/hex"
)

h := sha256.Sum256([]byte("hello"))
hashHex := hex.EncodeToString(h[:])
Java (MessageDigest)java.security
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest("hello".getBytes(StandardCharsets.UTF_8));
// 转换为十六进制字符串
StringBuilder hex = new StringBuilder();
for (byte b : hash) hex.append(String.format("%02x", b));
PHP (hash)内置函数
// MD5
$md5 = md5("hello");

// SHA-256
$sha256 = hash("sha256", "hello");

// HMAC-SHA256
$hmac = hash_hmac("sha256", "hello", "secret");
Linux CLI (coreutils)终端命令
# 计算字符串 MD5
echo -n "hello" | md5sum

# 计算文件 SHA256 校验和
sha256sum package.tar.gz

哈希散列与加密常见技术问答 (FAQ)

解答 MD5 破解原理、彩虹表对抗及密码安全散列最佳实践。

Q1: MD5 能被逆向解密吗?为什么有些网站能“解密”?

MD5 在数学上是单向不可逆的单向散列函数,无法通过公式反推原始明文。网络上所谓的“MD5在线解密”,其底层并非真正解密,而是通过预先计算好海量常见密码并存储在超大规模数据库中的彩虹表 (Rainbow Table) 进行反向匹配查表。对于随机生成的强密码,由于彩虹表中未收录,是无法被“解密”的。

Q2: 为什么存储用户密码绝不能使用纯 MD5 或纯 SHA-256?

MD5 和 SHA-256 的设计初衷是为了追求高速计算,现代消费级 GPU 每秒可计算数百亿次 MD5 哈希。如果攻击者拿到数据库脱库文件,可以在极短时间内暴力破解出明文。安全的密码存储方案必须引入随机盐值 (Salt),并使用专为密码学设计的慢哈希算法,如 bcrypt、Argon2 或 PBKDF2,通过增加计算工作量和内存消耗来彻底遏制暴力破解。

Q3: 16 位 MD5 与 32 位 MD5 有什么区别?

标准 MD5 算法的计算结果是固定的 128 位二进制数,用十六进制表示即为 32 个字符。所谓的 16 位 MD5,实际上就是从 32 位散列值中直接截取了第 9 位至第 24 位(共 16 个字符)。两者在算法本质上完全相同,只是取出的子串长度不同。

Q4: HMAC 相比普通 Hash 算法有什么优势?

HMAC (Hash-based Message Authentication Code) 是一种基于密钥的报文鉴别码。与普通的 Hash(key + message) 相比,HMAC 采用内部和外部两轮哈希结构,不仅具备数据完整性校验功能,还能防范密码学中的长度扩展攻击 (Length Extension Attack),是 Web API 开放接口签名校验的标准规范。