# SHA-256（SHA-2 256 位版本）是什么？

> SHA-256 是 SHA-2 哈希家族中输出 256 位摘要的成员，由 NIST FIPS 180-4 规定，是当今 TLS 证书签名和指纹的标准哈希算法。

Source: https://ssl.sh/zh/glossary/sha-256/
Last updated: 2026-11-10

SHA-256 是 SHA-2 家族中的一员，属于[哈希函数](https://ssl.sh/zh/glossary/hash-function/)，由 NIST 在 FIPS 180-4 中规定，输出 256 位摘要，抗碰撞强度约 128 位。同一家族还有 SHA-384、SHA-512。2010 年代中期，它在 WebPKI 中全面取代了 [SHA-1](https://ssl.sh/zh/glossary/sha-1/)。

## 为什么重要
SHA-256 在 TLS 中无处不在。大多数证书用 sha256WithRSAEncryption 或 ecdsa-with-SHA256 签名（P-384 证书常用 SHA-384）；TLS 1.2 的 PRF 通常基于它，TLS 1.3 中 TLS_AES_128_GCM_SHA256 等套件用它做 HKDF；[证书透明度](https://ssl.sh/zh/glossary/certificate-transparency/)日志用它构建 Merkle 树；证书指纹和 DANE 的 [TLSA](https://ssl.sh/zh/glossary/tlsa/) 记录一般也基于它。已知的量子算法对哈希函数只有有限的加速，SHA-256 不会像 RSA、ECC 那样受到根本威胁。国密 SM3 与它同为 256 位输出，常被拿来对比。

## 例子
计算证书指纹，以及证书公钥的 SHA-256 哈希（即 TLSA 3 1 1 记录使用的值）：

```bash
openssl x509 -in example.com.crt -noout -fingerprint -sha256
openssl x509 -in example.com.crt -noout -pubkey | openssl pkey -pubin -outform DER | openssl dgst -sha256
```

证书指纹每次续期都会变，而只要继续沿用同一把私钥，公钥哈希就保持不变。

## 常见误区
- **"SHA-256 证书"是一种特殊产品。** SHA-256 只是签名所用的哈希算法，今天签发的所有公开信任证书都使用 SHA-256 或更强的算法。
- **SHA-256 就是 256 位加密。** 它是哈希函数而不是加密算法，不加密任何数据。
- **量子计算机会像破解 RSA 一样破解 SHA-256。** Shor 算法不适用于哈希函数，Grover 类搜索带来的加速对 SHA-256 来说仍留有充足余量。

## 相关术语

- [哈希函数](https://ssl.sh/zh/glossary/hash-function/): 哈希函数（密码学哈希函数）把任意长度的输入映射为固定长度的摘要，且在计算上无法逆推输入，也无法找到摘要相同的两个输入。
- [SHA-1](https://ssl.sh/zh/glossary/sha-1/): SHA-1 是 1995 年发布的 160 位哈希函数，已出现实际可行的碰撞攻击，公开信任的 TLS 证书早已不再允许使用它签名。
- [数字签名](https://ssl.sh/zh/glossary/digital-signature/): 数字签名是用私钥对消息计算出的一个值，任何持有对应公钥的人都能验证它，从而确认消息来源和内容未被篡改。
- [证书指纹](https://ssl.sh/zh/glossary/certificate-fingerprint/): 证书指纹是对证书 DER 编码计算出的哈希值（通常用 SHA-256），用来唯一标识一张证书，它本身并不存储在证书里。
- [证书透明度](https://ssl.sh/zh/glossary/certificate-transparency/): 证书透明度（CT）是一套公开、只可追加的日志系统，记录所有公开信任的 TLS 证书，让任何人都能审计 CA 签发了什么。
- [TLSA 记录](https://ssl.sh/zh/glossary/tlsa/): TLSA 记录是一种 DNS 记录，声明某个端口和协议上的 TLS 服务必须出示哪张证书或哪个公钥，供 DANE 校验使用。
