# 哈希函数：MD5、SHA-256、BLAKE2 及使用场景

> 密码学哈希函数实用指南——哪些已被破解（MD5、SHA-1）、应使用哪些（SHA-256、BLAKE2），以及在支付安全中的应用。

Canonical: https://hsmkit.com/zh/guides/hash-functions-guide/

Last updated: 2026-04-03

哈希函数在安全领域无处不在——从密码存储到区块链，从文件完整性到数字签名。本文解释哈希函数的工作原理、应该使用哪种算法以及哪些应该避免。

## 什么是密码学哈希函数？

哈希函数接受任意大小的输入，产生**固定大小的输出**（哈希值或摘要）。密码学哈希函数还具有以下特性：

1. **确定性**：相同输入始终产生相同输出
2. **单向性**：无法从哈希值反推输入
3. **雪崩效应**：输入微小变化 → 输出完全不同
4. **抗碰撞性**：在计算上不可能找到两个具有相同哈希值的输入

## 常用哈希算法

### MD5 —— 已被破解，避免用于安全场景
- 输出：128 位（32 个十六进制字符）
- 状态：**密码学上已被破解**（碰撞可在秒级内找到）
- 仍可用于：非安全校验和、遗留系统、文件去重
- **绝不用于**：密码存储、数字签名、安全关键应用

### SHA-1 —— 已废弃
- 输出：160 位（40 个十六进制字符）
- 状态：**已被破解**（2017 年 SHAttered 攻击找到碰撞）
- 已从 TLS 1.3 中移除
- **绝不用于**：新的安全应用

### SHA-256 —— 现代安全的主力算法
- 输出：256 位（64 个十六进制字符）
- SHA-2 系列的一部分
- 用于：比特币、TLS 证书、代码签名、JWT（HS256/RS256）
- 状态：**安全**，广泛信任
- **适用于**：通用安全、数字签名、HMAC

### SHA-384 / SHA-512 —— 更高安全性的 SHA-2
- 输出：384 / 512 位
- 在 64 位系统上比 SHA-256 更快
- 用于：高安全性应用、政府系统
- 状态：**安全**

### SHA-3（Keccak）—— NIST 标准，不同设计
- 输出：224/256/384/512 位
- 与 SHA-2 完全不同的内部结构（海绵结构）
- 作为 SHA-2 被破解时的备用方案设计
- 状态：**安全**，部署不如 SHA-2 广泛

### BLAKE2 —— 快速且安全
- 输出：可变（最大 512 位）
- 在现代硬件上比 MD5 更快，同时保持安全
- 用于：WireGuard、密码哈希（Argon2 内部使用）
- 状态：**安全，推荐**用于性能敏感场景

### SM3 —— 中国国家标准
- 输出：256 位
- 中国政府和金融系统强制要求
- 安全性与 SHA-256 相当
- 状态：**安全**

## 哈希算法对比

| 算法 | 输出 | 速度 | 安全性 | 用途 |
|------|------|------|--------|------|
| MD5 | 128 位 | 极快 | 已破解 | 仅校验和 |
| SHA-1 | 160 位 | 快 | 已破解 | 仅遗留系统 |
| SHA-256 | 256 位 | 良好 | 强 | 通用 |
| SHA-512 | 512 位 | 良好（64位） | 强 | 高安全性 |
| SHA-3-256 | 256 位 | 中等 | 强 | SHA-2 备选 |
| BLAKE2b | 512 位 | 极快 | 强 | 性能场景 |

## HMAC——基于哈希的消息认证

HMAC（Hash-based Message Authentication Code）使用哈希函数和密钥提供**认证**：

```
HMAC(密钥, 消息) = Hash((密钥 ⊕ opad) || Hash((密钥 ⊕ ipad) || 消息))
```

HMAC-SHA256 广泛用于：
- API 认证（JWT HS256）
- 支付系统中的消息完整性
- TLS 记录认证

使用我们的 [HMAC 计算器](/payments-mac-hmac) 计算 HMAC-SHA256/SHA512 值。

## 哈希函数在支付安全中的应用

在支付系统中，哈希用于：

### MAC 算法
MAC（消息认证码）算法使用哈希函数验证消息完整性：
- **ISO 9797-1**：基于 DES 的 MAC —— 参见 [ISO 9797 MAC 工具](/payments-mac-iso9797-1)
- **ANSI X9.9/X9.19**：零售 MAC —— 参见 [ANSI MAC 工具](/payments-mac-ansix9)
- **AES-CMAC**：现代 AES 基础 MAC —— 参见 [CMAC 工具](/payments-mac-cmac)

### KCV（密钥校验值）
KCV 本质上是密钥的哈希——用密钥加密全零并取前 3 字节。参见 [密钥分片与 KCV 指南](/zh/guides/understanding-key-splitting-kcv/)。

### CVV 计算
CVV 使用类似哈希的基于 DES 的过程。参见 [CVV 指南](/zh/guides/cvv-cvc-calculation-methods/)。

## 密码哈希——特殊情况

普通哈希函数**不适合**存储密码，因为它们太快（攻击者每秒可以尝试数十亿次猜测）。

应使用专用密码哈希函数：
- **bcrypt**：经过时间检验，广泛支持
- **Argon2**：密码哈希竞赛获胜者，新系统推荐
- **scrypt**：内存密集型，良好替代方案
- **PBKDF2**：NIST 批准，用于许多标准

这些函数故意设计得慢且内存密集，以抵抗暴力破解攻击。

## 在线工具

使用我们的 [哈希计算器](/hashes) 计算：

- MD5、SHA-1、SHA-256、SHA-384、SHA-512
- SHA-3（224/256/384/512）
- BLAKE2b、BLAKE2s、BLAKE3
- SM3、RIPEMD-160
- 支持文本、十六进制或文件输入

所有计算完全在浏览器中运行。
