本我 · 加载中...

文章背景图

现代密码学入门:对称加密、非对称加密与哈希

2026-08-06
0
-
- 分钟
|

现代密码学入门:对称加密、非对称加密与哈希

三个绕不开的问题

密码学听起来高深,但日常工程里只反复面对三个问题:

  1. 数据怎么加密存储/传输? —— 对称加密
  2. 密钥怎么安全交换? —— 非对称加密
  3. 数据怎么验真/验完整性? —— 哈希与签名

把这三件事搞懂,Web 安全 80% 的概念都能串起来。

一、对称加密:快,但要解决密钥分发

原理

加密和解密用同一个密钥:

明文 + 密钥 → 密文
密文 + 密钥 → 明文

常见算法

算法 密钥长度 特点
AES 128/192/256 现代标准,硬件加速好
ChaCha20 256 移动端/无硬件加速场景友好
DES/3DES 56/112 已过时,不要用

分组模式

AES 是分组密码,需要选择工作模式:

  • ECB:相同明文块产生相同密文块,不安全(可被模式分析)
  • CBC:每块与前一密文异或,需要随机 IV
  • GCM:AEAD 模式,同时提供加密和完整性校验,推荐
# AES-256-GCM 示例(Python)
import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)
nonce = os.urandom(12)               # GCM 推荐 12 字节 nonce
ciphertext = aesgcm.encrypt(nonce, b"secret message", b"aad")
plaintext = aesgcm.decrypt(nonce, ciphertext, b"aad")

对称加密的死穴

密钥分发:通信双方怎么安全地拿到同一个密钥?如果通过不安全通道传输,密钥本身就可能被窃取。这就引出了非对称加密。

二、非对称加密:慢,但解决密钥交换

原理

一对密钥:公钥加密,私钥解密(反之亦可签名):

明文 + 公钥 → 密文(只有私钥能解开)
密文 + 私钥 → 明文

公钥可以公开分发,私钥自己保管。解决了对称加密的密钥分发问题

常见算法

算法 用途 密钥长度 现状
RSA 加密/签名 2048/3072/4096 主流但渐被替代
ECDSA 签名 256 效率高,推荐
ECDH 密钥交换 256 HTTPS 密钥协商用

经典场景:HTTPS 握手简化版

1. Client → Server: 你好,我要建立安全连接
2. Server → Client: 这是我的证书(含公钥)
3. Client: 验证证书 → 用服务器公钥加密一个随机密钥 K 发给 Server
4. Server: 用私钥解出 K
5. 双方用 K 做对称加密通信(快)

核心思想:非对称加密只用于传递会话密钥,实际数据传输用对称加密——兼顾安全与性能。这就是混合加密。

三、哈希:单向不可逆

特性

  • 任意长度输入 → 固定长度输出
  • 单向:无法从哈希反推原文
  • 雪崩效应:输入改一个字节,输出面目全非
  • 抗碰撞:很难找到两个不同输入得到相同哈希

常见算法

算法 输出长度 用途 现状
MD5 128bit 校验 不安全,防碰撞已破解
SHA-1 160bit 兼容 不安全,已被碰撞攻击
SHA-256 256bit 签名/校验 推荐
bcrypt/argon2 可变 密码存储 密码存储专用

密码存储为什么不能用 SHA-256

# 错误:明文哈希,彩虹表一查一个准
hash(password)

# 错误:加固定盐,不同用户同密码仍同哈希
hash(salt + password)

# 正确:加随机盐 + 慢哈希(计算成本高,抗暴力破解)
import bcrypt
hashed = bcrypt.hashpw(b"my_password", bcrypt.gensalt(rounds=12))

慢哈希让暴力破解变慢是特性不是缺陷——攻击者跑一遍字典要几年,而你验证一次只慢几十毫秒。

四、数字签名与证书

签名流程

发送方:私钥 对 消息哈希 签名 → 发送 消息 + 签名
接收方:公钥 验签 → 确认消息未被篡改且来自发送方

证书链

公钥如何确认"真的是对方"?引入第三方信任锚:

浏览器信任根证书 → 根证书签发中间证书 → 中间证书签发网站证书

证书包含:域名、公钥、签发者、有效期、签名。浏览器验证证书签名是否有效,确认无误后建立 TLS 连接。这就是 PKI(公钥基础设施)的基本模型。

五、工程实践清单

  1. 加密算法只用现代标准:AES-256-GCM、ChaCha20、ECDSA、SHA-256
  2. 密码存储用 bcrypt/argon2/scrypt,永远不自己设计哈希方案
  3. 密钥管理:密钥与代码分离,用 KMS/环境变量/密钥管理服务
  4. IV/Nonce 必须随机且唯一:GCM 模式 nonce 重用是灾难
  5. TLS 配置:只启用 TLS 1.2+,证书用 ECDSA 或 RSA-2048+
  6. 不要自己造密码学:用成熟的库(OpenSSL、libsodium、cryptography.io)

结语

密码学的正确姿势是"会选、会用、不自己造"。对称加密管速度,非对称加密管密钥分发,哈希管完整性——三者组合起来,就是 HTTPS、文件加密、密码存储这些日常场景的全部基础。

原创

现代密码学入门:对称加密、非对称加密与哈希

本文链接: 现代密码学入门:对称加密、非对称加密与哈希

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本文为原创文章,转载请联系作者并注明出处。

评论交流

文章目录