← 返回博客

什么是 SHA256 哈希,与 MD5 有何不同

2026-04-03 · 5 分钟阅读

SHA256 简介

SHA256(Secure Hash Algorithm 256-bit)是 SHA-2 哈希函数家族的成员,由美国国家安全局(NSA)设计,2001 年由美国国家标准与技术研究院(NIST)发布。SHA256 将任意长度的输入转换为 256 位(64 个十六进制字符)的哈希值。它是目前互联网基础设施中使用最广泛的哈希算法之一。

SHA256("hello") =
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

SHA256("Hello") =
185f8db32921bd46d35a569dd56f9b9c9f6b0a37bbbb6e0e12e7e2430ee4a998

SHA256("") =
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

SHA256 的安全强度

SHA256 的 256 位输出意味着有 2 的 256 次方种可能的哈希值(约 1.16 × 10 的 77 次方)。要通过暴力搜索找到碰撞,理论上需要约 2 的 128 次方次计算——即使用地球上所有计算机运算数亿年也无法完成。迄今为止,没有已知的可行碰撞攻击,SHA256 仍然被认为是密码学安全的哈希函数。

SHA256 的工作原理

SHA256 使用 Merkle-Damgård 构造,处理步骤包括:对输入进行填充使其长度为 512 位的倍数、将数据分成 512 位的块、使用 64 个常量(前 64 个质数的立方根的小数部分)和 8 个初始哈希值(前 8 个质数的平方根的小数部分)、通过 64 轮的压缩函数处理每个数据块。每轮使用位运算、模加法和移位操作,产生最终的 256 位输出。

SHA256 的主要应用场景

SHA256 与 SHA-2 家族

SHA-2 家族包括多个变体,数字表示输出的比特长度:SHA-224(224 位,28 字节)、SHA-256(256 位,32 字节)、SHA-384(384 位,48 字节)、SHA-512(512 位,64 字节)、SHA-512/224 和 SHA-512/256(使用 SHA-512 计算,截断为更短输出)。SHA-256 和 SHA-512 是使用最广泛的,在 32 位系统上 SHA-256 性能更好,在 64 位系统上 SHA-512 有时更快。

SHA-3:SHA256 的继任者?

2012 年,NIST 宣布 Keccak 算法成为 SHA-3 标准。SHA-3 的设计与 SHA-2 完全不同(使用海绵构造而非 Merkle-Damgård),提供了结构性多样性——如果 SHA-2 的某个设计缺陷被发现,SHA-3 仍然是安全的。然而,SHA-256 目前没有被发现任何严重漏洞,SHA-3 并没有取代 SHA-256 的趋势,两者并存于不同的应用场景中。

在代码中使用 SHA256

// JavaScript (Node.js)
const crypto = require('crypto');
const hash = crypto.createHash('sha256').update('hello').digest('hex');
// '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824'

// Python
import hashlib
hash = hashlib.sha256(b'hello').hexdigest()
# '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824'

// Go
import "crypto/sha256"; import "fmt"
hash := fmt.Sprintf("%x", sha256.Sum256([]byte("hello")))

立即免费使用相关工具

免费使用 →