对称加密与非对称加密:AES、RSA、ECC 算法原理与适用场景

加密这玩意儿,说白了就两大流派:对称加密和非对称加密。我刚开始接触密码学时觉得对称加密简单粗暴,非对称加密花里胡哨,后来踩的坑多了才知道——各有各的脾气,用对地方才叫本事。

这一章我们就把 AES、RSA、ECC 这三个主流算法拆开揉碎,看看它们到底怎么工作,适合干什么,不适合干什么。嗯,先上一张总览图,帮你建立整体印象。

对称加密 vs 非对称加密 核心流程 对称加密(AES 为代表) 明文 "Hello" 加密(AES) 密钥 密文 "X9kQ..." 解密(AES) 非对称加密(RSA / ECC 为代表) 明文 "Hi" 加密(公钥) 公钥 密文 "A12b..." 解密(私钥) 私钥 对称加密:加密解密用同一个密钥;非对称加密:公钥加密,私钥解密

1. 对称加密:AES 算法

AES(Advanced Encryption Standard)是当今最常用的对称加密算法。为什么大家都在用?因为够快、够安全。我做过一个数据库字段加密的项目,当时选型对比了好几个算法,最后全栈都统一用了 AES-256-GCM——原因后面会讲。

原理简述

AES 对数据进行分组加密,每组 128 位(16 字节)。密钥长度支持 128、192、256 位。说白了就是“替换 + 置换”反复多轮,把明文打散成完全随机分布的密文。256 位版本在可预见的未来都很难被暴力破解。

适用场景

  • 数据库字段加密:单机或分布式系统内,密钥可安全存储在 KMS 或 HSM 中。
  • 文件批量加密:比如备份文件、日志归档。
  • 通信链路对称加密:TLS 握手完成后,数据传输阶段其实用的是对称加密(如 AES-GCM)。
实战建议:我个人习惯用 AES-256-GCM 模式——自带认证标签,能同时防篡改和防重放。还记得有一次项目用 AES-CBC,结果换密钥时没处理好 IV 复用,差点出事。自那以后我全推 GCM。

2. 非对称加密:RSA 与 ECC

非对称加密有公私钥对,公钥公开,私钥保密。这样的好处是不用提前共享密钥。但是,性能比对称加密慢几个数量级。所以实际系统里它主要用来“分发对称密钥”或做数字签名。

RSA(Rivest-Shamir-Adleman)

RSA 基于大整数分解的数学难题。给你公钥(n, e),想推出私钥 d 需要分解 n 的质因数——n 越大越安全。目前推荐 RSA-2048 起步,4096 更稳妥。

痛点:密钥越长,加解密越慢。2048 位的 RSA 每秒只能做几百次签名,而同样安全强度的 ECC 可以快一个数量级。

ECC(Elliptic Curve Cryptography)

ECC 基于椭圆曲线上的点运算。256 位的 ECC 密钥等价于 3072 位 RSA 的安全性。这就是为什么现在 TLS 1.3 默认推荐 ECDHE 密钥交换。

我在项目中维护过一个老旧支付系统,RSA 2048 签名导致高并发时 CPU 爆表。换 ECDSA 后,签名延迟从 8ms 降到 1ms 左右,效果立竿见影。

经典对比表

特性AES (对称)RSA (非对称)ECC (非对称)
密钥长度推荐256 位2048 / 4096 位256 位 (secp256r1)
加密速度极快 (GB/s 级)慢 (MB/s 级)中等 (MB/s 级)
典型用途数据加密、批量加密密钥交换、数字签名密钥交换、签名(更轻量)
抗量子计算尚可 (增大密钥即可)脆弱脆弱
数学基础置换 + 替换网络大整数分解椭圆曲线离散对数

3. 混合加密:TLS 中的实际做法

你想想看,如果 TLS 全程用非对称加密传输数据,性能根本撑不住。实际上 TLS 工作方式是:

  1. 握手阶段用非对称加密(ECDHE 或 RSA)交换一个临时对称密钥(会话密钥)。
  2. 后续数据用 AES-GCM 对称加密传输。

这就是典型的混合加密。我经常被新人问:「为什么握手之后不继续用公钥加密?」——因为对称加密快啊,而且每次会话的密钥都是新的,安全性也能保证。

4. 避坑指南 & 选型决策树

下面这几条是我在实际项目里摔过跟头之后总结的,希望对你有帮助。

  • 不要自己实现加密算法。使用成熟的库,比如 OpenSSL、BoringSSL、libsodium。我曾经见过有人手动实现 AES,结果 S 盒写错一位,整个系统加密后无法解密,惨痛教训。
  • 密钥管理比算法本身更重要。再强的算法,密钥硬编码在代码里也是白给。建议使用 KMS 或 HSM 密钥。
  • ECDHE 比 RSA 密钥交换更适合现代 TLS。因为 ECDHE 支持前向安全,即使长期私钥泄露,历史会话也不会被解密。
  • 不要迷信“最强算法”。比如有些场景用 AES-128 就够了,性能还比 AES-256 好 10% 左右。安全强度足够即可,没必要无脑上 256。

核心原则:对称加密用来加密数据,非对称加密用来分发密钥或签名。把两者组合好,就是大部分安全系统的基石。

特别提醒:ECC 算法虽然快速、密钥短,但实现细节容易出错——比如随机数生成器不够随机导致私钥泄露。我建议优先使用经过验证的标准曲线(P-256、X25519),避免自己配曲线参数。

5. 本章小结